加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

Sql server SQL Server:触发器仅影响1行

发布时间:2022-10-30 14:31:11 所属栏目:MsSql教程 来源:网络
导读: Sql server SQL Server:触发器仅影响1行
sql-servertriggers
Sql server SQL Server:触发器仅影响1行,sql-server,triggers,Sql Server,Triggers,我有一个从外部JSON获取数据并将其解析到表

Sql server SQL Server:触发器仅影响1行

sql-servertriggers

Sql server SQL Server:触发器仅影响1行,sql-server,triggers,Sql Server,Triggers,我有一个从外部JSON获取数据并将其解析到表中的过程,该过程工作得非常好。现在,我尝试创建一个触发器,以便在添加数据集时,触发器将数据分离到适当的表和列中CREATE TRIGGER main.afterParsing ON main.jsontableAFTER INSERTASBEGIN--Country VariablesDECLARE @CountryCountry NVARCHAR(50)--Person VariablesDECLA

我有一个从外部JSON获取数据并将其解析到表中的过程,该过程工作得非常好。现在,我尝试创建一个触发器Mssq触发器,以便在添加数据集时,触发器将数据分离到适当的表和列中

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;

这是触发器,但出于某种原因,它只更新一行。我做错了什么?

默认情况下,批量语句不执行触发器。但是,可以使用FIRE_触发器限定符启用触发器:

下面是触发器的更新代码

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

@CountryCountry是持有单个国家还是多个国家?它应该持有单个国家。它给了我一个单一的国家,但我如何让它在触发器中从一排转到另一排呢?因为它只考虑第1行的国家/地区,所以触发器应该是批处理的。您在源表中进行批量插入吗?是的,我正在使用BulkColumn获取JSON文件的信息。它仍然只影响1行

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!