Учитывая следующую простую тестовую таблицу:
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')
)