【发布时间】:2020-05-09 14:25:05
【问题描述】:
如果我在插入触发器中运行以下 select 语句,它是否有可能返回多个结果?: DECLARE @variable char(1) = (SELECT ID FROM insert) 如果是这样,那么最好的处理方法是什么?
这是我要解决的问题:每次将新记录插入表时,我都想将新插入的 ID 插入另一个表(如果它不存在)。
谢谢!
【问题讨论】:
-
这不仅是可能的,而且很有可能,而且这样的代码完全是错误的(因为有一个错误等待发生)。处理它的正确方法是不要将
inserted中的值分配给变量。您需要在问题中提供更多信息才能获得更好的答案。 -
你可以使用 SCOPE_IDENTITY()
-
除了
SCOPE_IDENTITY()返回一个 标量 值,@user3510665 和INSERT可以影响 1 到 ∞ 行。如果再插入 2 个(它们可以并且将会插入),则会出现与为变量赋值相同的问题。inserted包含数据集,应视为数据集。 -
使用
INSERT...SELECT...FROM inserted WHERE NOT EXISTS或类似的MERGE语句有条件地从inserted插入多行。
标签: sql sql-server