2010-07-02 13 views
5

Estoy insertando registros de un servidor sql db a otro. Necesito obtener la nueva identificación insertada y actualizar un campo en la tabla fuente. Puedo obtener la nueva identificación con la opción INSERTED no hay problema. Sin embargo, parece que no puedo obtener el ID de la tabla fuente. La tabla de destino no tiene un campo para la ID de la fuente. La tabla fuente es una tabla de conversión y no quiero contaminar la tabla de destino con los campos de conversión. Esto puede no ser posible, pero pensé que primero verificaría con ustedes.Instrucción de inserción de SQL Server utilizando INSERTED para obtener una ID nueva y una ID existente

drop table #Table1 
CREATE TABLE #Table1 
(
    Table1ID INT, 
    Table2ID INT, 
    NAME VARCHAR(32) 
) 

INSERT INTO #Table1 
VALUES 
     (1, NULL, 'Fred') 
    ,(2, NULL, 'Tom') 
    ,(3, NULL, 'Sally')  

--ok, im inserting into #Table2 
drop table #Table2 
CREATE TABLE #Table2 
(
    [Table2ID] [int] IDENTITY(1,1) NOT NULL, 
    NAME VARCHAR(32) 
) 

--THE RUB, I want to insert Table2ID into table3 
--along with Table1ID. I cannot seem to reference table1 
--Any Ideas? 
insert into #Table2(NAME) 
OUTPUT INSERTED.Table2ID, T.Table1ID into #Table3 
select Name from #Table1 T 

Respuesta

5

No puede hacerlo con INSERT (seno que carece de una cláusula FROM de su propia) pero se puede hacer con MERGE:

MERGE INTO #Table2 as t2 
USING #Table1 as t1 ON 0=1 
WHEN NOT MATCHED BY TARGET THEN 
    INSERT (NAME) VALUES (t1.NAME) 
OUTPUT INSERTED.Table2ID, t1.Table1ID ; 
+0

Funciona como un campeón ... Gracias Remus! – Steve

1

Ponga el campo de id de conversión en la tabla. Esto no está contaminando la mesa, está manejando el problema apropiadamente. Además, puede recuperarlo en la cláusula de salida. Y hará que sea más sencillo actualizar las tablas secundarias también. No veo ninguna razón para no hacer esto a menos que tengas desarrolladores pobres que usan Select * en el código de producción.

+0

Estamos generando un modelo de la db y yo estaba tratando de evitar tener para dar el paso adicional para no exponer el id de conversión en el modelo. Creo que su sugerencia es probablemente la forma más adecuada de manejar la conversión. – Steve

Cuestiones relacionadas