关于c#:从存储过程中返回最后插入的行的标识

Return identity of last inserted row from stored procedure

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE PROCEDURE [sp_name]
    @AuthorisationCode uniqueidentifier
AS
    INSERT INTO [tablename]
           ([AuthorisationCode]
           )
     VALUES
           (@AuthorisationCode
           )

 RETURN @@IDENTITY

GO

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

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


我想说您应该使用SCOPE_IDENTITY(),因为@@identity将返回最后插入的内容的标识(如果同时运行多个查询,则可能不是您的存储过程)。

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

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

所以...

1
SELECT SCOPE_IDENTITY();

可能是您想要的。


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

1
SELECT SCOPE_IDENTITY()

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

http://msdn.microsoft.com/zh-cn/library/ms190315.aspx


您应该使用select @@identity