2011-01-27 12 views
5

estoy trabajando en el servidor sql, donde quiero insertar el registro en una tabla particular, decir (a), esta tabla contiene dos columnas [id (Identity Field) y nombre (nvarchar (max)] ahora después de insertar los registros en la tabla (a), un disparador debe disparar e insertar el valor del campo de identidad en la tabla b ... lo estoy usando después del desencadenador de inserción para este propósito, pero no entiendo cómo que sería conseguir el valor del campo de identidad en el gatillo ... que debe ser insertado en la tabla b.cómo trabajar después del desencadenador de inserción en el servidor sql 2008

Esto es lo que estoy usando

create trigger tri_inserts on (a) 
after insert 
as 
begin 
    insert into b (id, name) values (?,?) 
end 

por favor, responda a la brevedad posible .. Gracias y saludos Abbas Electricwala

+0

Consulte esta pregunta sobre cómo obtener las identidades SQL y cómo se comporta cada una: http://stackoverflow.com/questions/42648/best-way-to-get-identity-of-inserted-row – nybbler

+0

@nybbler: esto es en una inserción real. En el disparador INSERT debería leer la tabla INSERTED – gbn

Respuesta

12
create trigger tri_inserts on a 
after insert 
as 
set nocount on 

insert into b (id, name) 
    SELECT id, name FROM INSERTED 
GO 
+0

gracias por la respuesta, – Abbas

6

@gbn tiene la mejor solución, pero quiero que entender por qué la cláusula SELECT es mejor que usar una cláusula de valores en un disparador. Dispara el fuego para cada lote de registros insertados/actualizados/eliminados. Por lo tanto, el pseudotable insertado o el pseudotable eliminado pueden tener un registro o pueden tener un millón. El disparador tiene que poder manejar cualquier caso. Si usas una cláusula de valores, solo obtienes la acción para uno de los registros, fuera del millón. Esto causa problemas de integridad de datos. Si decide recorrer los registros con un cursor y usar la cláusula VALUES, su rendimiento será horrible cuando obtenga una gran cantidad de registros. Cuando llegué a este trabajo, tuvimos uno de esos desencadenantes, tomó 45 minutos insertar un inserto de 40,000 registros. Quitar el cursor y usar una solución basada en conjuntos basada en la cláusula SELECT (aunque es mucho más compleja que el ejemplo) redujo el tiempo para la misma inserción a alrededor de 40 segundos.

Cuestiones relacionadas