Sql 如何借助scope_Identity()获取标识值
我在触发器中实现了scope_identity()Sql 如何借助scope_Identity()获取标识值,sql,triggers,scope-identity,Sql,Triggers,Scope Identity,我在触发器中实现了scope_identity() ALTER TRIGGER TempProcTrig ON Table_temp2 AFTER insert AS BEGIN declare @TempIdentity int set @TempIdentity =scope_identity() insert Table_Temp(TempID) values(@TempIdentity) END 触发触发器时@TempIdentity获取标
ALTER TRIGGER TempProcTrig
ON Table_temp2
AFTER insert
AS
BEGIN
declare @TempIdentity int
set @TempIdentity =scope_identity()
insert Table_Temp(TempID)
values(@TempIdentity)
END
触发触发器时@TempIdentity获取标识列字段,
并将此值设置到另一个表中
但是,总是在触发后,@TempIdentity将为NULL
为什么TempIdentity不获取标识字段?我应该在代码中更改什么?第一个问题:您在编写触发器时假设只插入一行。如果一条语句插入多行,会发生什么情况 触发器中有一个特殊的
inserted
表,其中包含触发触发器的操作插入的所有行。您可以这样使用它:
INSERT INTO Table_Temp
(TempID)
SELECT i.YourIdentityColumn
FROM inserted i
第一个问题:您在编写触发器时假设只插入一行。如果一条语句插入多行,会发生什么情况 触发器中有一个特殊的
inserted
表,其中包含触发触发器的操作插入的所有行。您可以这样使用它:
INSERT INTO Table_Temp
(TempID)
SELECT i.YourIdentityColumn
FROM inserted i
这个问题的原因是,顾名思义 从触发器调用它将从触发器中返回标识值,该值为
NULL
,因为您没有插入任何行
正如Joe所建议的,使用插入的
表来获取所需的值,而不是此函数。此问题的原因是,顾名思义
从触发器调用它将从触发器中返回标识值,该值为NULL
,因为您没有插入任何行
正如Joe所建议的,使用插入的表来获取所需的值,而不是此函数。+1-这是一个非常常见的问题(尤其是在过去一个月左右的SO上)+1-这是一个非常常见的问题(尤其是在过去一个月左右的SO上)