2012-01-16 17 views
5

Estoy usando SQL Server 2008 para crear un procedimiento.Obtener valores de columna de identidad al INSERTAR

estoy usando la siguiente instrucción SQL para insertar en una tabla de auditoría

insert into Listuser 
(
    UserID, 
    ListID, 
    AuditCreated 
) 
    select 
    UserID, 
    ListID, 
    GETDATE() 
from ListUser where Surname='surname' 

estoy usando scope_identity() para obtener la columna de identidad de la mesa LISTUSER e insertar la columna de identidad a otra mesa registros

Si la instrucción select contiene más de 1 valor, ¿cómo obtener el valor de identidad de ambas columnas e insertarlo en la tabla de registros?

Thanjs

Respuesta

12

Si usted necesita para capturar múltiples valores de identidad que se insertan, que haría uso de la cláusula de OUTPUT:

Se trata de introducir todas las filas en la tabla de ListUser, y hará salir todas identidades generadas por este insertar en la variable @TableOfIdentities mesa

Read more about the OUTPUT clause on MSDN

Estos valores se insertan en la variable de tabla, y usted puede seleccionarlos a partir de esa variable de tabla después de la inserción, y hacer lo que hay que hacer con ellos:

SELECT * FROM @TableOfIdentities 

Actualización: el uso de la la variable de tabla aquí es solo un ejemplo, por supuesto, también puede mostrar los datos en una tabla "normal" en SQL Server, y también puede generar múltiples valores para cada fila insertada, si es necesario, para que pueda tener algo como :

INSERT INTO dbo.Listuser(UserID, ListID, AuditCreated) 
    OUTPUT Inserted.ID, Inserted.UserID, Inserted.SurName, GETDATE() 
     INTO AuditTable(IdentValue, UserID, Surname, InsertDate) 
    SELECT 
     UserID, ListID, GETDATE() 
    FROM 
     dbo.ListUser 
    WHERE 
     Surname = 'surname' 
+0

se puede añadir directamente a la tabla permanente – user386258

+1

@ user3862 58: Podemos, pero hay ciertas restricciones sobre qué cosas no puede tener la tabla objetivo. Lee el artículo vinculado por marc_s para más detalles. –

+0

@ marc_s, ¿puedo insertar el ID directamente en la tabla permanente (tabla de registros) en lugar de la variable de tabla – user386258

Cuestiones relacionadas