Триггеры в SQL Server - PullRequest
       9

Триггеры в SQL Server

1 голос
/ 15 ноября 2010

Есть две таблицы Table_Trigger и Table_Trigger1 . Я создал триггер на Table_Trigger1 .Он работает отлично. Ниже приведен мой триггер-скрипт -

CREATE TRIGGER Test_Trigger
ON Table_Trigger1

INSTEAD OF INSERT

AS
SET NOCOUNT ON

INSERT INTO Table_Trigger1(FirstName)
SELECT FirstName from INSERTED I
WHERE I.firstName in (SELECT FirstName from Table_Trigger)

, когда мое условие where истинно, я получаю сообщение ( 1 строка (строки), затронутые ) и значение сохранено в таблице.Но когда мое условие where ложно, в этот раз я также получаю сообщение ( 1 строка (строки) затронуто ) и значение не сохраняется в таблице.

Мой вопрос: если условиеfalse и значение не сохраняются в таблице, поэтому я получил сообщение ( 1 строка (а) ).в чем смысл этого сообщения.

Заранее спасибо.

1 Ответ

3 голосов
/ 15 ноября 2010

В двух словах, «затронутые строки» для вашей оригинальной вставки не знают, что происходит за кулисами в вашем триггере. Он проходит через один ряд и считает этот ряд "затронутым".

Я попытался найти документацию, подтверждающую это. Самым близким, что я мог прийти, была документация по SqlCommand.ExecuteNonQuery , в которой говорится:

Для ОБНОВЛЕНИЯ, ВСТАВКИ и УДАЛЕНИЯ заявления, возвращаемое значение количество строк, затронутых команда. Когда триггер существует на таблица вставляется или обновляется, возвращаемое значение включает в себя количество строки, затронутые как вставкой, так и операция обновления и количество строки, на которые воздействует триггер или триггеры.

Конечно, SET NOCOUNT ON в вашем триггере подавляет возврат числа строк, затронутых в триггере, поэтому вы видите только результат оригинального оператора вставки.

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