[英]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.