как работать с триггером вставки после SQL Server 2008 - PullRequest
5 голосов
/ 27 января 2011

Я работаю на сервере SQL, где я хочу вставить запись в определенную таблицу, скажем (а), эта таблица содержит два столбца [id (Identity Field) и имя (nvarchar (max)] теперь после записивставленный в таблицу (a), триггер должен сработать и вставить значение поля идентификатора в таблицу b .... я использую после триггера вставки для этой цели, но я не понимаю, как я получу значение поля идентификатора в триггере... который должен быть вставлен в таблицу b.

Это то, что я использую

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

Пожалуйста, ответьте как можно скорее .. Спасибо и С уважением Abbas Electricwala

Ответы [ 2 ]

13 голосов
/ 27 января 2011
create trigger tri_inserts on a
after insert
as
set nocount on

insert into b (id, name)
    SELECT id, name FROM INSERTED
GO
6 голосов
/ 27 января 2011

@ gbn имеет лучшее решение, но я хочу, чтобы вы поняли, почему предложение SELECT лучше, чем использование предложения VALUES в триггере.Триггеры запускаются для каждой партии вставленных / обновленных / удаленных записей.Таким образом, вставленный псевдотаблица или удаленный псевдостол может иметь одну запись или миллион.Триггер должен быть в состоянии справиться с любым случаем.Если вы используете предложение значений, вы получите действие, которое произойдет только с одной из записей из миллиона.Это приводит к проблемам целостности данных.Если вы решите перебрать записи в курсоре и использовать предложение VALUES, ваша производительность будет ужасной, когда вы получите большое количество записей.Когда я пришел на эту работу, у нас был один такой триггер, для вставки 40 000 записей понадобилось 45 минут.Удаление курсора и использование основанного на множестве решения на основе предложения SELECT (хотя и гораздо более сложного, чем в примере) сократило время для той же вставки примерно до 40 секунд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...