我有一个带有两个插入语句的存储过程。我想从第一个插入中返回ID。看起来大致如下:
declare @retVal int
Begin transaction
insert into myTable(..) values (..)
set @retVal = scope_identity()
insert into myTable2(..) values(..)
Commit transaction
return @retVal
当我这样做时,insert语句工作正常但每次都返回相同的值(在这种情况下,来自myTable
的ID 6,原因有些奇怪。)
有人会猜测发生了什么吗?
答案 0 :(得分:6)
请使用OUTPUT
参数。 RETURN
用于返回状态/错误代码,而不是数据。例如,RETURN
仅处理INT
。猜猜当您更改表格以使用BIGINT
时会发生什么,因为INT
还不够?
ALTER PROCEDURE dbo.YourProcedure
@params VARCHAR(32),
@Table1ID INT = NULL OUTPUT
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRANSACTION;
INSERT dbo.Table1...
SET @Table1ID = SCOPE_IDENTITY();
INSERT dbo.Table2...
COMMIT TRANSACTION;
END
GO