我有一个过程,它从外部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;
这是触发器,但由于某种原因,它只更新了一行。我做错了什么?
答案 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