4

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

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

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

 RETURN @@IDENTITY

GO

我通过 Enterprise library 4.1 中的 Execute Scalar 调用这个存储过程。

它返回空值。任何人都看到我做错了什么。

4

3 回答 3

13

我想说你应该使用SCOPE_IDENTITY()as@@identity将返回最后插入的东西的标识(如果多个查询同时运行,这可能不是你的存储过程)。

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

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

所以...

SELECT SCOPE_IDENTITY();

可能更多的是你想要的。

于 2010-11-30T15:56:10.183 回答
7

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

SELECT SCOPE_IDENTITY()

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

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

于 2010-11-30T15:55:19.963 回答
0

你应该使用select @@identity

于 2010-11-30T15:53:32.523 回答