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

时间:2010-02-16 05:09:10

标签: 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);

显然我尝试了上述方法但没有成功;我只是坚持使用第一种方法吗?

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

谢谢!

3 个答案:

答案 0 :(得分:8)

是的,使用第一种方法。

或者...

SELECT
    @var1 = col1
    ,@var2 = col2
FROM
    Inserted;

答案 1 :(得分:2)

但是,如果您希望在触发器中设置类似的变量值,那么它是一个主要的红旗。它通常意味着触发器设计不当并需要修改。此代码期望插入的记录只有一个,这在所有情况下都不会成立。多记录插入或更新将插入多个记录,触发器必须考虑到这一点(请不要使用触发器!!!)。在任何情况下都不应写入触发器以仅处理一个记录的插入/更新或删除。必须编写它们来处理数据集。

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

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 :(得分:0)

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