2017-02-20 2 views
-1

Допустим, моя таблица имеет 2 значения. После инструкции insert, как получить данные записи вставки и вставить ее в триггер? Я использую структуру сущности для событий CRUD.Значение триггера MSSQL

//orginalTable has 2 fields for example. 

    CREATE TRIGGER originalTable_Audit ON [originalTable] 
AFTER INSERT 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 
    -- Insert statements for trigger here 
INSERT INTO originalTable_Audit values(@value,@value2,@action,@updatedBy) 

Нужно ли мне самому это вытаскивать?

ответ

1

Триггеры Sql Server используют два псевдо табличных вызова inserted и deleted, которые сохраняют записи, сделанные оператором, который запускает триггер.
В триггер для вставки, то deleted таблица будет пустой, конечно, но inserted таблица будет иметь все записи, которые были вставлены в таблицу (или должен быть вставлен в случае instead of триггера.)

Важное примечание: На сервере Sql запускается огонь за оператор, а не за строку. Это означает, что даже если ваш оператор insert вставил 3 записи, триггер будет запущен только один раз, а ваша таблица inserted будет содержать все 3 записи.
При написании триггеров, вы должны знать об этом факте, в противном случае вы можете получить исключения, или еще хуже, неправильные данные (худшие, так как вы не знаете, это в режиме реального времени)

Для дальнейшего чтения, пожалуйста, обратитесь к the relevant page in Microsoft's documentatin.

Так триггер должен выглядеть следующим образом:

CREATE TRIGGER originalTable_Audit ON [originalTable] 
AFTER INSERT 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 
    -- Insert statements for trigger here 
    INSERT INTO originalTable_Audit (<Columns List of originalTable_Audit>) 
    SELECT <Columns List of originalTable> 
    FROM insterted 
END 
+0

Спасибо. оно работает. Я googled еще где и я думал, что вставленный является само объявленной таблицей. после пробуждения, тогда понял, что это от mssql –