INSERTED 表中的多行

tko*_*ser 5 sql t-sql sql-server sql-server-2008

在 MS SQL Server 中的表上,如果这些行满足特定条件,我需要对新行运行 CLR 存储过程。我认为这或多或少是简单的:

if ((SELECT Cabinet FROM INSERTED) = 1 OR (SELECT Cabinet FROM INSERTED) = 3) AND (SELECT Result_02 FROM INSERTED) = 'N'
BEGIN
    DECLARE @id int
    SET @id = (SELECT ID FROM INSERTED)
    exec PrintLabel
        @id,
        N'LP 2844 LGE'
END;
Run Code Online (Sandbox Code Playgroud)

但是,最近开始抛出有关返回多行的子查询的错误。我了解到 INSERT 触发器为每个语句运行一次,而不一定在单独的行上运行。因此,该 IF 语句可以作用于多行,从而产生错误。

我的问题是:如果批量添加行(在本例中通过 MERGE 语句),如何迭代每个新行。

And*_*mar 1

调用 N 行的存储过程仍然需要游标。

declare @id int
declare cur cursor fast_forward for 
    select  id 
    from    inserted 
    where   Cabinet in (1,3)
open cur
fetch next from cur into @id
while @@fetch_status = 0   
    begin
    exec PrintLabel @id, N'LP 2844 LGE'
    fetch next from cur into @id
    end
close cur
deallocate cur
Run Code Online (Sandbox Code Playgroud)