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

时间:2010-11-30 15:51:36

标签: c# sql sql-server-2008 enterprise-library enterprise-library-4.1

我正在尝试从存储过程返回最后一个插入行的标识。

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

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

 RETURN @@IDENTITY

GO

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

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

3 个答案:

答案 0 :(得分:13)

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

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

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

因此...

SELECT SCOPE_IDENTITY();

可能更符合您的要求。

答案 1 :(得分:7)

您应该使用select而不是return,但是您也应该使用SCOPE_IDENTITY来防止返回错误身份的问题,@@ IDENTITY不限于特定范围。

SELECT SCOPE_IDENTITY()

可在此处找到更多信息:

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

答案 2 :(得分:0)

你应该使用select @@identity