Использование OUTPUT после INSERT для получения значения столбца идентификатора в переменной (не табличное значение)

Учитывая следующую простую тестовую таблицу:

CREATE TABLE dbo.Test
(
  Id bigint IDENTITY(1,1) NOT NULL,
  Name varchar(50) NULL
)

Я хотел бы получить значение столбца идентификаторов в скалярной переменной после INSERT с помощью предложения OUTPUT , но это не работает:

DECLARE @InsertedId BIGINT;

INSERT INTO Test(Name) 
  OUTPUT @InsertedId=inserted.Id
  VALUES ('Michael')

-- Display resulting id for debugging
SELECT @InsertedId;
-- ...

Я знаю, что могу легко сделать это, используя SCOPE_IDENTITY () после INSERT , но возможно ли это сделать как часть оператора INSERT с использованием предложения OUTPUT , не прибегая к табличной переменной?

Обновление , еще одна надуманная попытка, которая также не является законным:

-- Return the id as a result set
INSERT INTO Test(Name) 
OUTPUT inserted.Id AS TheId
VALUES ('Michael')

-- But you can't use the result set as a derived table...
SELECT TheId FROM
(
  INSERT INTO Test(Name) 
  OUTPUT inserted.Id AS TheId
  VALUES ('Michael')
)

-- ..., or you would be able to do this
SELECT TOP 1 @InsertedId=TheId
FROM
(
  INSERT INTO Test(Name) 
  OUTPUT inserted.Id AS TheId
  VALUES ('Michael')
)
10
задан Michael Goldshteyn 3 June 2011 в 00:42
поделиться