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

时间:2013-03-07 18:29:39

标签: sql-server tsql

我有一个带有两个插入语句的存储过程。我想从第一个插入中返回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,原因有些奇怪。)

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

1 个答案:

答案 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