Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何借助scope_Identity()获取标识值_Sql_Triggers_Scope Identity - Fatal编程技术网

Sql 如何借助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获取标

我在触发器中实现了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获取标识列字段, 并将此值设置到另一个表中

但是,总是在触发后,@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上)