sql-server – 需要一个插入行并返回ID的存储过程
发布时间:2020-12-12 16:41:44 所属栏目:MsSql教程 来源:网络整理
导读:我试图写一个存储过程,首先将新记录插入到表中,然后返回这个新记录的id.我不知道这是否是正确的方式和实现这个的最好方法. ALTER PROCEDURE dbo.spAddAsset(@Name VARCHAR(500),@URL VARCHAR(2000))ASBEGINSet NOCOUNT on;Insert Into Assets (Name,URL) Valu
我试图写一个存储过程,首先将新记录插入到表中,然后返回这个新记录的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没有出现修复. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |