如果我有2個表,請將它們稱爲TableA和TableB。 TableB包含一個引用TableA的外鍵。我現在需要爲給定場景添加數據到TableA和TableB。爲此,我首先必須在TableA中插入數據,然後查找並檢索TableA的最後插入的主鍵,並將其用作TableB中的外鍵值。然後我在TableB中插入值。這似乎只是爲了插入一組數據而做的工作。我還能怎麼做到這一點?如果可能的話,請爲我提供SQL Server 2005的SQL語句。如何將數據添加到通過外鍵鏈接的兩個表中?
5
A
回答
4
這聽起來是正確的。請注意,您可以基於每行使用SCOPE_IDENTITY()
,或者如果使用INSERT/OUTPUT語法,然後加入第一個插入的輸出集合,則可以執行基於集合的操作 - 例如,在這裏我們只有1 INSERT(each)into「real」tables:
/*DROP TABLE STAGE_A
DROP TABLE STAGE_B
DROP TABLE B
DROP TABLE A*/
SET NOCOUNT ON
CREATE TABLE STAGE_A (
CustomerKey varchar(10),
Name varchar(100))
CREATE TABLE STAGE_B (
CustomerKey varchar(10),
OrderNumber varchar(100))
CREATE TABLE A (
Id int NOT NULL IDENTITY(51,1) PRIMARY KEY,
CustomerKey varchar(10),
Name varchar(100))
CREATE TABLE B (
Id int NOT NULL IDENTITY(1123,1) PRIMARY KEY,
CustomerId int,
OrderNumber varchar(100))
ALTER TABLE B ADD FOREIGN KEY (CustomerId) REFERENCES A(Id);
INSERT STAGE_A VALUES ('foo', 'Foo Corp')
INSERT STAGE_A VALUES ('bar', 'Bar Industries')
INSERT STAGE_B VALUES ('foo', '12345')
INSERT STAGE_B VALUES ('foo', '23456')
INSERT STAGE_B VALUES ('bar', '34567')
DECLARE @CustMap TABLE (CustomerKey varchar(10), Id int NOT NULL)
INSERT A (CustomerKey, Name)
OUTPUT INSERTED.CustomerKey,INSERTED.Id INTO @CustMap
SELECT CustomerKey, Name
FROM STAGE_A
INSERT B (CustomerId, OrderNumber)
SELECT map.Id, b.OrderNumber
FROM STAGE_B b
INNER JOIN @CustMap map ON map.CustomerKey = b.CustomerKey
SELECT * FROM A
SELECT * FROM B
1
如果你直接使用SQL,你有正確的解決方案。
如果你正在執行從代碼插入,你可能有更高層次的結構,可以幫助你實現這一點(LINQ,Django模型等)。
1
如果你打算在直接SQL中這樣做,我建議創建一個將所有數據作爲參數的存儲過程,然後在事務中執行插入/選擇標識/插入步驟。儘管該過程仍然與手動插入相同,但使用存儲過程將使您可以更輕鬆地從代碼中使用它。正如@Rax提到的,您也可以使用ORM來獲得類似的功能。
相關問題
- 1. 將數據插入到通過外鍵鏈接的表中
- 2. 如何通過接口將外鍵添加到ASPNET Membership Provider?
- 3. 將超鏈接添加到數據表
- 4. 將數據插入通過外鍵連接到另一個表的數據
- 5. 如何將數據添加到兩個因表中的Django
- 6. 如何通過scala中的鍵加入兩個數據集spark
- 7. 通過外鍵鏈接的三個表上的內部聯接
- 8. 將外鍵添加到rails數據庫
- 9. 如何將兩個按鈕添加到asp.net MVC中的兩個動作鏈接?
- 10. laravel-mongodb:如何將外鍵添加到兩個現有集合?
- 11. 如何通過sql中的外鍵關係將數據插入到兩個表中關聯php
- 12. Python和MySql,將數據插入到通過外鍵連接的兩個表中的另一種方法
- 13. 通過javascript將url鏈接添加到href鏈接
- 14. 將SQL數據插入SQLite中的鏈接(外鍵)表中
- 15. 將外鍵列添加到表中。
- 16. 如何通過JS文件添加鏈接到表格
- 17. Django:通過表單創建時,將類與外鍵鏈接到另一個類
- 18. 如何通過遞歸添加鏈接列表中的元素?
- 19. Java - 通過文本UI將人員添加到鏈接列表
- 20. 如何將兩個別名添加到通過MySql查詢創建的表中?
- 21. 如何將兩個表數據添加到C#中的Crystal報表中
- 22. jQuery將_blank添加到外部鏈接
- 23. 如何通過MySQL中的外鍵鏈接檢索某些值?
- 24. SQL和外鍵:如何正確鏈接這兩個表?
- 25. 如何將外鍵添加到現有的SQLite表中?
- 26. 如何在CRM 2011中添加外部鏈接到表單?
- 27. 通過javascript添加鏈接到圖像
- 28. 將數據添加到Hive外部表
- 29. 如何將項目添加到Java中的鏈接列表中?
- 30. 如何通過sequelizejs中的外鍵找到數據?
謝謝馬克......這正是我正在尋找的......這是在我的永久書籤上。 – 2014-08-05 19:42:03