使用scope_identity()从存储过程返回值

lar*_*ryq 1 t-sql sql-server

我有一个带有两个插入语句的存储过程.我想从第一个插入中返回ID.看起来大致如下:

declare @retVal int
Begin transaction

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

set @retVal = scope_identity()

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

Commit transaction

return @retVal
Run Code Online (Sandbox Code Playgroud)

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

有人会猜测发生了什么吗?

Aar*_*and 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
Run Code Online (Sandbox Code Playgroud)