sql-server – 需要一个插入行并返回ID的存储过程

前端之家收集整理的这篇文章主要介绍了sql-server – 需要一个插入行并返回ID的存储过程前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图写一个存储过程,首先将新记录插入到表中,然后返回这个新记录的id.我不知道这是否是正确的方式和实现这个的最好方法.
ALTER PROCEDURE dbo.spAddAsset
(
@Name VARCHAR(500),@URL VARCHAR(2000)
)
AS
BEGIN
Set NOCOUNT on;

Insert Into Assets (Name,URL) Values (@Name,@URL)

Declare @new_identity int;

SELECT @new_identity = SCOPE_IDENTITY()

return @new_identity;
END

解决方法

要将单个标量值返回给调用者,您应该使用OUTPUT参数,而不是RETURN. RETURN是错误/状态代码.前缀sp也是冗余和不必要的.
CREATE PROCEDURE dbo.AddAsset
  @Name VARCHAR(500),@URL  VARCHAR(2000),@new_identity INT = NULL OUTPUT
AS
BEGIN
    SET NOCOUNT ON;

    INSERT dbo.Assets(Name,URL) SELECT @Name,@URL;
    SET @new_identity = SCOPE_IDENTITY();
END
GO

然后叫它:

DECLARE @new_identity INT;
EXEC dbo.AddAsset @Name = 'a',@URL = 'b',@new_identity = @new_identity OUTPUT;
PRINT @new_identity;

编辑只是添加一个免责声明,这不会影响在这个具体情况下的发件人,但可能有助于其他情况或未来的读者.在sql Server 2008 R2及更早版本中,当使用并行度来导出要插入的结果时,会有一个内置函数(如SCOPE_IDENTITY)的potentially nasty bug(从INSERT FROM othertable).这个bug(here is the Connect item)在Cumulative Update #5 for SQL Server 2008 R2 SP1固定,但到目前为止,2008 R2 RTM,2008或2005没有出现修复.

猜你在找的MsSQL相关文章