SQL Server: триггер влияет только на 1 строку - PullRequest
0 голосов
/ 26 мая 2018

У меня есть процедура, которая берет данные из внешнего JSON и разбирает их в таблицу, которая работает отлично.Теперь я пытаюсь создать триггер, чтобы при добавлении набора данных триггер разделял данные на соответствующие таблицы и столбцы.

CREATE TRIGGER main.afterParsing 
ON main.jsontable
AFTER INSERT
AS
BEGIN
    --Country Variables
    DECLARE @CountryCountry NVARCHAR(50)

    --Person Variables
    DECLARE @PersonName NVARCHAR(50)
    DECLARE @PersonSurname NVARCHAR(50)
    DECLARE @PersonEmail NVARCHAR(50)
    DECLARE @PersonAge NVARCHAR(50)
    DECLARE @PersonCountry NVARCHAR(50)
    DECLARE @PersonRegistered NVARCHAR(50)

    --Get Country
    SELECT @CountryCountry = jsontable.country FROM inserted jsontable;

    --Insert Country
    INSERT INTO country(countryName)
        SELECT @CountryCountry
        WHERE @CountryCountry NOT IN (Select CountryName FROM Country)
END;

Это триггер, но по какой-то причине он толькообновление одной строки.Что я делаю не так?

1 Ответ

0 голосов
/ 26 мая 2018

По умолчанию, оператор не выполняет триггеры.Однако вы можете включить триггеры, используя квалификаторы FIRE_TRIGGERS:

http://msdn.microsoft.com/en-us/library/ms188365(v=sql.105).aspx и ниже - обновленный код для вашего триггера.

GO

CREATE TRIGGER main.afterParsing ON main.jsontable
AFTER INSERT
AS
BEGIN

    --Country Variables
    DECLARE @CountryCountry NVARCHAR(50)

    --Person Variables
    DECLARE @PersonName NVARCHAR(50)
    DECLARE @PersonSurname NVARCHAR(50)
    DECLARE @PersonEmail NVARCHAR(50)
    DECLARE @PersonAge NVARCHAR(50)
    DECLARE @PersonCountry NVARCHAR(50)
    DECLARE @PersonRegistered NVARCHAR(50)

    --Get Country
    SELECT @CountryCountry = jsontable.country FROM inserted jsontable;

    IF NOT EXISTS (Select CountryName FROM Country WHERE CountryName=@CountryCountry)
    BEGIN
    --Insert Country
    INSERT INTO country(countryName)
    VALUES (@CountryCountry)
   END 

END;

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