Estoy insertando varios registros en una tabla A de otra tabla B. ¿Hay alguna forma de obtener el valor de identidad de la tabla A y actualizar la tabla b sin tener que hacer un cursor?¿Cómo insertar múltiples registros y obtener el valor de identidad?
Create Table A
(id int identity,
Fname nvarchar(50),
Lname nvarchar(50))
Create Table B
(Fname nvarchar(50),
Lname nvarchar(50),
NewId int)
Insert into A(fname, lname)
SELECT fname, lname
FROM B
estoy usando MS SQL Server 2005.
Me doy cuenta de que esta es una vieja pregunta y especifica SQL Server 2005, pero dado que es el primer resultado para mostrar la declaración MERGE disponible en 2008 y posterior, debe mencionarse para aquellos que buscan una solución. Combinar en TargetTable USO ( SELECT .... ) como fuente de EN 1 = 2 Si la alineación no ENTONCES INSERT .... OUTPUT inserted.ID EN TempTable ( InsertedID ) – oldegreyg
No necesita una fusión para un simple inserto. Merge es bueno para una inserción/actualización, pero exagerado para una simple inserción en. La respuesta de salida de Andy funcionó para mí y ayudó a quitar un bloqueo de índice. – CodeMonkeyForHire
La respuesta de Andy Irving es la mejor. Los desencadenadores son torpes y no funcionan bien para operaciones arbitrarias en su tabla de destino, especialmente si su objetivo es temporal o simplemente intermedio. La respuesta de Darren es incorrecta, si está insertando un conjunto de filas, su orden en la tabla objetivo no es necesariamente el mismo que el orden de su conjunto. El camino de Dmitry es malo porque requiere un bucle para insertar una sola fila a la vez, que es de bajo rendimiento, siempre use conjuntos cuando pueda. El camino de Cory es malo y explicó por qué, "siempre y cuando no entren en conflicto". Esto va a convertirse en un sábado por la noche c – clemahieu