2011-02-28 36 views
5

就像前言一樣,我對T-SQL語法不是很瞭解。幫助T-SQL腳本:插入記錄,然後在另一個語句上使用該插入的身份?

我想創建一個簡單的SQL腳本,它將生成3個插入語句。

Insert A 
Insert B 
Insert C 

插入插入語句中需要聲明的標識或「ID」。 並且這兩個標識插入A & B將在插入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) 

我將如何去寫這個劇本?

+0

相關問題:http://stackoverflow.com/questions/42648/best-way-to-get-identity-插入行 – Oded 2011-02-28 21:56:39

回答

18

每次插入後使用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) 
+1

+1,用於使用SCOPE_IDENTITY而不是@@ IDENTITY。 – 2011-02-28 21:55:05

+0

Thx Oded,那工作:) – 2011-02-28 22:07:20

+0

也許我是瘋了,但實際上不是語法'select @ Id1 = scope_identity()'? – 2013-12-30 16:58:03

1

scope_identity()是完美的類型爲int(+1其他答案BTW)的標識。但是,如果你發現自己使用的GUID爲ID的,你需要的東西有點不同:

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