Given the following simple test table:
CREATE TABLE dbo.Test ( Id bigint IDENTITY(1,1) NOT NULL, Name varchar(50) NULL ) I would like to get the value of the identity column into a scalar variable after the INSERT using the OUTPUT clause, but this does not work:
DECLARE @InsertedId BIGINT; INSERT INTO Test(Name) OUTPUT @InsertedId=inserted.Id VALUES ('Michael') -- Display resulting id for debugging SELECT @InsertedId; -- ... I know I can easily do this using SCOPE_IDENTITY() after the INSERT, but is it possible to do it as part of the INSERT statement using the OUTPUT clause without resorting to a table variable?
Update, another contrived attempt that is also not legal:
-- 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') )