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)
可能更符合你的要求.
您应该使用select而不是return,但是您还应该使用SCOPE_IDENTITY来防止返回错误标识的问题,@@ IDENTITY不限于特定范围.
SELECT SCOPE_IDENTITY()
Run Code Online (Sandbox Code Playgroud)
更多信息可以在这里找到:
http://msdn.microsoft.com/en-us/library/ms190315.aspx