SQL Server:触发器仅影响1行

时间:2018-05-26 03:25:50

标签: sql-server triggers

我有一个过程,它从外部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 :(得分:-1)

默认情况下,bulk,statement不执行触发器。但是,您可以使用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