在SQL Server 2008中从一行设置多个标量变量?

在SQL Server 2008中从一行设置多个标量变量?,sql,sql-server,tsql,sql-server-2008,Sql,Sql Server,Tsql,Sql Server 2008,在触发器中,我有如下代码: SET @var1 = (SELECT col1 FROM Inserted); SET @var2 = (SELECT col2 FROM Inserted); 是否可以在一行中写出以上内容?概念上类似于: SET (@var1,@var2) = (SELECT col1,col2 FROM Inserted); 显然,我尝试了上述方法,但没有成功;我只是坚持第一种方法吗 即使可能,这是个好主意吗 谢谢 是,使用第一种方法 或者 不,这是不可能的。SET接受单个

在触发器中,我有如下代码:

SET @var1 = (SELECT col1 FROM Inserted);
SET @var2 = (SELECT col2 FROM Inserted);
是否可以在一行中写出以上内容?概念上类似于:

SET (@var1,@var2) = (SELECT col1,col2 FROM Inserted);
显然,我尝试了上述方法,但没有成功;我只是坚持第一种方法吗

即使可能,这是个好主意吗

谢谢

是,使用第一种方法

或者


不,这是不可能的。SET接受单个目标和值。好的。

但是,如果您希望在触发器中设置这样的变量值,那么这是一个主要的危险信号。这通常意味着触发器设计不当,需要修改。这段代码期望在inserted中只有一条记录,但并非所有情况下都是这样。多记录插入或更新将插入多个记录,触发器必须对此进行说明(请不要使用触发器!!!)。在任何情况下,触发器都不应仅用于处理一条记录的插入/更新或删除。必须编写它们来处理数据集

将插入的值插入到触发器位于表1上的另一个表中的示例:

CREATE TRIGGER mytrigger on table1
AFTER INSERT
AS

INSERT table2 (field1, field2, field3)
SELECT field1, 'test', CASE WHEN field3 >10 THEN field3 ELSE 0 END
FROM inserted

你能给我举一个多记录插入触发器的例子吗?谢谢。这是示例触发器,不确定我是否理解您现在的要求。对不起。我知道您正在使用表2中的插入值插入到表2中。我的意思是,如何处理插入的每列检查值中的每条记录?例如,如果一个触发器有多个CardTransaction,我需要分析插入的每个CardTransaction。这更清楚还是需要我发布更多?你在选择的位置处理它们。在问题中公布当前触发器的作用,我可以尝试向您展示如何将其设置为基于集合的。噢,在插入的每个记录中插入一个光标怎么样?
CREATE TRIGGER mytrigger on table1
AFTER INSERT
AS

INSERT table2 (field1, field2, field3)
SELECT field1, 'test', CASE WHEN field3 >10 THEN field3 ELSE 0 END
FROM inserted