繁体   English   中英

使用SCOPE_IDENTITY会导致另一个查询

[英]Using SCOPE_IDENTITY result in another query

我在使用此代码时遇到困难

EXECUTE Environment.dbo.psu_some_psu

@instanceId = 1
,@serverId = 2
,@ip = '111.111.111.111'
,@clientName = 'dev-contact'
,@applicationId = 9
,@accountId = 35
,@userID = 22

DECLARE @restoreId INT
SET @restoreId = SCOPE_IDENTITY()

UPDATE Environment.dbo.restore_requests
SET Status = 1
WHERE Id = @restoreId

默认情况下,该存储过程将插入一行带有身份的状态。 在执行存储过程之后,我使用scope_identity获取插入行的ID。 但是我无法使更新生效,我认为WHERE条件存在问题。

谢谢

之所以称为SCOPE_IDENTITY()是因为它返回插入到当前作用域中的最后一个标识值-并且由于每个过程都有它自己的作用域-您不会获得预期的结果。

返回插入到同一作用域的标识列中的最后一个标识值。 范围是一个模块:存储过程,触发器,函数或批处理。 因此,如果两个语句在同一存储过程,函数或批处理中,则它们在同一范围内。

使用输出参数从实际执行insert语句的过程内部返回scope_identity()

另外,请注意,如果要插入多个记录, scope_identity()将仅返回最后一个值-在这种情况下,您可以在insert语句上使用output子句来获取包含所有新插入的标识值的表。

DECLARE @MyTableVar table( NewScrapReasonID smallint,  
                           Name varchar(50),  
                           ModifiedDate datetime);  
INSERT Production.ScrapReason  
    OUTPUT INSERTED.ScrapReasonID, INSERTED.Name, INSERTED.ModifiedDate  
        INTO @MyTableVar  
VALUES (N'Operator error', GETDATE());  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM