1

我有一个带有两个插入语句的存储过程。我想从第一个插入返回 ID。它看起来大致是这样的:

declare @retVal int
Begin transaction

insert into myTable(..) values (..)

set @retVal = scope_identity()

insert into myTable2(..) values(..)

Commit transaction

return @retVal

当我这样做时,插入语句工作正常,但每次都返回相同的值(在这种情况下,ID 6 from myTable,出于某种奇怪的原因。)

有人能猜出发生了什么吗?

4

1 回答 1

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
于 2013-03-07T18:47:38.110 回答