从存储过程返回最后一个插入行的标识

Shi*_*iji 4 c# sql enterprise-library sql-server-2008 enterprise-library-4.1

我试图从存储过程返回最后插入行的标识.

我的代码的简化版本如下所示:

CREATE PROCEDURE [sp_name]
    @AuthorisationCode uniqueidentifier
AS
    INSERT INTO [tablename]
           ([AuthorisationCode]
           )
     VALUES
           (@AuthorisationCode
           )

 RETURN @@IDENTITY

GO
Run Code Online (Sandbox Code Playgroud)

我通过Enterprise Library 4.1中的Execute Scalar调用此存储过程.

它返回null.有人看到我做错了什么.

Col*_*kay 13

我会说你应该使用,SCOPE_IDENTITY()因为@@identity它将返回插入的最后一个东西的身份(如果多个查询同时运行,这可能不是你的存储过程).

您还需要选择它,而不是返回它.

ExecuteScalar 将从结果集的第一行返回第一列值.

所以...

SELECT SCOPE_IDENTITY();
Run Code Online (Sandbox Code Playgroud)

可能更符合你的要求.


MrE*_*yes 7

您应该使用select而不是return,但是您还应该使用SCOPE_IDENTITY来防止返回错误标识的问题,@@ IDENTITY不限于特定范围.

SELECT SCOPE_IDENTITY()
Run Code Online (Sandbox Code Playgroud)

更多信息可以在这里找到:

http://msdn.microsoft.com/en-us/library/ms190315.aspx