Справка по сценарию T-SQL: Вставить запись, а затем использовать личность этой вставки в другом выражении?

Как предисловие, я не очень хорошо разбираюсь в синтаксисе T-SQL.

Я бы хотел создать простой SQL-скрипт, который будет делать 3 вставных оператора.

Insert A Insert B Insert C 

Вставить Идентификатор заявления или «ID» потребуется в инструкции Вставить. И тождества Вставки C & B потребуются в инструкции Insert C.

Псевдокод будет выглядеть примерно так:

 INSERT INTO tableA VALUES ('blah', 'blah') INSERT INTO tableB VALUES (IDENTITY_FROM_A_INSERT, 'foo') INSERT INTO tableC VALUES (IDENTITY_FROM_A_INSERT, IDENTITY_FROM_B_INSERT) 

Как я могу написать этот скрипт?

Используйте SCOPE_IDENTITY() после каждой вставки, чтобы получить личность вставленной строки (в текущем сеансе).

Я использовал две переменные для захвата двух тождеств, а затем вставлял их в третью таблицу:

 DECLARE @Id1 INT DECLARE @Id2 INT INSERT INTO tableA VALUES ('blah', 'blah') SET @Id1 = SELECT SCOPE_IDENTITY() INSERT INTO tableB VALUES (IDENTITY_FROM_A_INSERT, 'foo') SET @Id2 = SELECT SCOPE_IDENTITY() INSERT INTO tableC VALUES (@Id1, @Id2) 

scope_identity() идеально подходит для идентификаторов типа int (+1 к другому ответу btw). Однако, если вы обнаружите, что используете идентификаторы для идентификаторов, вам нужно что-то другое:

 declare @ID uniqueidentifier ,@NewlyInsertedIds table ([ID] uniqueidentifier) -- a table variable for storing your newly inserted IDs insert [MyTable] ( [Blah1] ,[Blah2] ) ouptut inserted.[ID] into @NewlyInsertedIDs -- in the output clause you can access the inserted/deleted pseudo tables ( 'Blah' ,'Blah' ) select @ID = [ID] from NewlyInsertedIds