在触发器中,我的代码如下:
SET @var1 = (SELECT col1 FROM Inserted);
SET @var2 = (SELECT col2 FROM Inserted);
是否可以将上述内容写入一行?概念上的东西:
SET (@var1,@var2) = (SELECT col1,col2 FROM Inserted);
显然我尝试了上述方法但没有成功;我只是坚持使用第一种方法吗?
即使可能,这是一个好主意吗?
谢谢!
答案 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。