2011-03-29 114 views
4

我正在使用存儲過程將數據插入到數據庫中,當它插入時它會自動給出一個ID,這是一個標識,它也是表的主鍵。我還需要將數據插入到第二個表中,該表的ID是需要插入的列之一。但它的ID尚未創建,所以我想知道你們如何解決這個問題。我需要它,所以當他們提交我的表單時,它會插入用戶,然後我需要將它添加到基本上會記錄該用戶被創建的表中。這可能嗎。?我使用的是Microsoft SQL Server 2005中SQL插入到兩個表中問題

感謝

+2

您使用的是什麼RDBMS? – 2011-03-29 15:04:00

回答

5
INSERT INTO Table1 (SomeColumn) Values ('SomeValue') 

DECLARE @NewIdent int 
SELECT @NewIdent = SCOPE_IDENTITY() 

INSERT INTO Table2 (SomeColumn, T1ID) VALUES ('SomeValue',@NewIDent) 

你可以看一下什麼@@ IDENTITY,SCOPE_IDENTITY()和IDENT_CURRENT,看看哪一個會滿足您的需求最好的。我懷疑SCOPE_IDENTITY會完成這項工作。

Here is a good article他們都在做什麼。

2

使用輸出子句從第一插入獲取ID和使用在礦井二次插入該值。

0

檢查第一次插入後scope_identity()系統函數的結果;它將包含先前插入的記錄的ID(假定ID是使用標識列自動生成的)。正如評論中所述,這比使用@@身份更好,因爲@@身份可能不準確,或者當數據庫中存在觸發器時或在高流量的情況下可能會被搶佔時,會導致問題。

+0

@@ identity在存在觸發器時有嚴重問題,並且可能在查詢容易相互中斷的高使用率系統中。 – Jody 2011-03-29 15:36:49

+0

我給;回答編輯。就我個人而言,我避免了觸發器,因爲它們包含的業務邏輯在應用程序層中更容易開發,測試和維護。但是,它們仍然有用,在這種情況下,你們是對的。 – KeithS 2011-03-29 21:33:42

0

U可以使用SCOPE_IDENTITY()插入新身份()