我正在尝试从存储过程返回最后一个插入行的标识。
我的代码的简化版本如下所示:
CREATE PROCEDURE [sp_name]
@AuthorisationCode uniqueidentifier
AS
INSERT INTO [tablename]
([AuthorisationCode]
)
VALUES
(@AuthorisationCode
)
RETURN @@IDENTITY
GO
我通过Enterprise Library 4.1中的Execute Scalar调用此存储过程。
返回null。有人看到我做错了什么。
答案 0 :(得分:13)
我说你应该使用SCOPE_IDENTITY()
因为@@identity
将返回插入的最后一个东西的身份(如果同时运行多个查询,则可能不是你的存储过程。)
您还需要选择它,而不是返回它。
ExecuteScalar
将返回结果集第一行的第一列值。
因此...
SELECT SCOPE_IDENTITY();
可能更符合您的要求。
答案 1 :(得分:7)
您应该使用select而不是return,但是您也应该使用SCOPE_IDENTITY来防止返回错误身份的问题,@@ IDENTITY不限于特定范围。
SELECT SCOPE_IDENTITY()
可在此处找到更多信息:
答案 2 :(得分:0)
你应该使用select @@identity