Sql server SQL Server使用触发器插入多行

Sql server SQL Server使用触发器插入多行,sql-server,triggers,Sql Server,Triggers,我正在将JSON文件中的数据加载到一个表“main.jsontable”中。触发任务是将“main.jsontable”中所有不同国家的数据插入到“main.country”表中。我的问题是触发器需要处理插入多行的问题我当前的代码是: create or alter trigger main.afterParsing on main.jsontable after insert as begin declare @country nvarchar(50); insert in

我正在将JSON文件中的数据加载到一个表“main.jsontable”中。触发任务是将“main.jsontable”中所有不同国家的数据插入到“main.country”表中。我的问题是触发器需要处理插入多行的问题我当前的代码是:

create or alter trigger main.afterParsing
on main.jsontable 
after insert
as
begin
    declare @country nvarchar(50);

    insert into main.country(countryName)
    values(@country)
end;
但是我得到了这个错误(显然是因为触发器一次只能处理插入一行):

无法在“assignment2.main.country”表的“countryName”列中插入值NULL;列不允许空值。插入失败

有人知道如何使用触发器插入多行吗


谢谢

您需要使用
插入的
伪表,并且您需要了解它可以包含多行(如果您的
插入
语句一次插入多行),并且您需要使用适当的基于集的方法相应地处理该表

试着这样做:

create or alter trigger main.afterParsing
on main.jsontable 
after insert
as
begin
    insert into main.country(countryName)
        select countryName
        from Inserted
        -- if the data being inserted could have NULL in the
        -- countryName - filter those entries out
        where countryName is not null
end;

为什么是触发器?将原始数据插入表中,然后运行另一个脚本来移动数据。这使得清理数据、删除重复、提高性能等变得更加容易。我希望如此,但这是我学校工作的一项任务。在这种情况下,我看到了这个问题的可能重复,但我认为它对我不起作用,因为它正在更新表,而不是插入。我需要的是向表中插入新数据,而不是updateStill,因为它会给我同样的错误。我试过使用游标,也许你对它很熟悉,但仍然没有任何线索:/@FrankanTabone你们在使用触发器和游标来完成这个任务吗?你上什么样的学校?诅咒者不,但是的,他们会发出一些奇怪的声音tasks@FrankanTabone:错误说明您无法将
NULL
插入该列-您的
insert
语句是否有可能生成
NULL
作为
countryName
??如果是,请将countryName不为NULL的
添加到触发器中的
选择
。看看我的最新答案,这是有效的。谢谢,我已经试了好几个小时了,不知道怎么解决这个问题。