我們正在將數據庫主鍵從GUID轉換爲自動遞增的INT。我們從文本文件中解析出數據,並將它們放入兩個C#數據表Claim
和ClaimCharge
中,我們一直使用它們批量插入數據庫中的同名表中。在數據庫中,ClaimCharge.ClaimID
是Claim.ID
的外鍵,對於一個索賠存在多個索賠費用。批量插入與未知自動遞增ID相關的數據集
使用GUID我們在C#中生成了Claim
和ClaimCharge
ID,因此批量插入不成問題。但對於INT,我不知道Claim.ID
會是什麼,所以我不能指定ClaimCharge.ClaimID
。我需要一些關於如何用INT來完成的想法。
例如,如果Claim
表可以被手動鎖定以防止嵌件,我可以:
- 批量插入到名爲
ClaimBulkData
ClaimChargeBulkData
備用表。爲了方便保持C#和SQL之間的關係,這些表仍然使用GUID。 - 手動鎖定
Claim
表對插入(不知道這是否可能)並獲得最大(ID)。 - 使用MAX(ID)遞增
ClaimBulkData
中的所有數據。 - 準
ClaimChargeBulkData
到ClaimBulkData
使用新近更新INT 作爲一組使用
- 手動創建的鎖對插入件上推出假想鎖
- 將數據插入真實
Claim
表Claim
表(再次,我不知道這是可能的。 - 將數據插入到真正
ClaimCharge
表。
IDENTITY_INSERT ON
使用某種例外在步驟2中創建
我想避免inser在C#或T-SQL中一次一行地處理數據。
使用此版本:Microsoft SQL Server 2008(SP3) - 10.0.5512.0(X64)。 Aug 22 2012 19:25:47。版權所有(c)1988-2008 Windows NT 6.0上的Microsoft Corporation標準版(64位)(內部版本6002:Service Pack 2) –
感覺就像您正在對付SQL Server,而不是讓它爲您工作。爲什麼不只是在他們來到時插入記錄,而是在獲得X條記錄之後再進行批量插入?感覺就像你要遇到主要的參照完整性問題。 –
這是另一個想法。 http://stackoverflow.com/questions/5365629/using-merge-output-to-get-mapping-between-source-id-and-target-id –