相對簡單的問題。
Table A
有ID int
PK,獨特的Name varchar(500)
和cola, colb
等
Table B
有一個外鍵Table A
。TSQL大量插入關係數據,W /外鍵Upsert
因此,在應用程序中,我們將表A和表B的記錄生成到內存中的DataTable中。
我們將在大量「客戶」上生成數千個這樣的記錄。
最後我們打電話來存儲這些記錄。但是,表A中的記錄可能已經存在於數據庫中,因此我們需要獲取已存在記錄的主鍵,並插入缺少的記錄。然後用正確的外鍵插入表B的所有記錄。
建議解決辦法:
我正在考慮派遣一個XML文檔到SQL Server作爲一個行集開到TableVarA
,更新TableVarA
與已存在的記錄的主鍵,然後插入缺失的記錄,輸出到TableVarNew
,然後我選Name
和主鍵TableVarA
工會全部TableVarNew
。
然後在代碼中將正確的FK填充到內存中的TableB
中,並使用SqlBulkCopy
插入所有這些記錄。
這聽起來像是一個很好的解決方案嗎?如果是這樣,在內存中填充FK的最佳方法是TableB
與返回的DataSet中的主鍵匹配。
這將在唯一的名稱上完成。 插入表A的哪個部分是你在談論改變?這不是從兩個表的變量中選擇一個聯合,而是使用TableVarNew的結果更新TableVarA並將其作爲DataSet返回? – TrevDev 2011-12-23 22:37:37
此外,我看到你的答案:http://stackoverflow.com/questions/3006472/fast-insert-relationalnormalized-data-tables-into-sql-server-2008-database 而這聽起來很聰明,但似乎更多地涉及數據導入,而不是優化將會發生的事情。 IE:許多客戶會很多時間發送很多記錄,所以試圖確保我們快速插入所有這些記錄非常重要。 – TrevDev 2011-12-23 22:42:08
@Thx:我不喜歡你打算至少使用兩個(或三個)不同的「TableA」變量併合並的事實。我認爲你可以用一個TableA變量來完成所有必要的操作。另外:是的,也許是用SqlBulkCopy把所有東西都推送到服務器的想法,然後做所有的修復工作並不是什麼壞主意! – 2011-12-24 09:20:53