我需要爲三個數據庫表實現一個導入導出模塊,這些數據庫表在內部與主鍵/外鍵約束相關。數據導入導出問題C#/ SQL服務器
我可以很容易地使用c#/ linq將xml/linq轉換爲sql。問題是,當我導入導出的數據時,在數據庫中,主鍵表的id正在重新生成,而不從xml文件中獲取/分配id(自然爲自動增量)。爲此,其他表數據無法導入/顯示主鍵約束違反的錯誤。
我的目標是導入所有數據並保持主鍵/外鍵不變。
現在,任何人都可以請建議我,我可以做些什麼來解決這個問題嗎?提前致謝。
我需要爲三個數據庫表實現一個導入導出模塊,這些數據庫表在內部與主鍵/外鍵約束相關。數據導入導出問題C#/ SQL服務器
我可以很容易地使用c#/ linq將xml/linq轉換爲sql。問題是,當我導入導出的數據時,在數據庫中,主鍵表的id正在重新生成,而不從xml文件中獲取/分配id(自然爲自動增量)。爲此,其他表數據無法導入/顯示主鍵約束違反的錯誤。
我的目標是導入所有數據並保持主鍵/外鍵不變。
現在,任何人都可以請建議我,我可以做些什麼來解決這個問題嗎?提前致謝。
您可以使用identity insert指定標識列的值。
如果您爲標識列指定顯式值,您自己負責解決衝突。如果數據庫已經有一行id = 1
,那麼如果導入也包含id = 1
,則必須決定要執行的操作:SQL Server只會引發錯誤。
我們總是對這些任務使用BCP操作。
我會建議不要讓你的自動遞增的主鍵,但是有可以以某種方式定義其他的獨立主鍵......那麼你將無法與自動增量
如果你不有問題t需要XML和SQL中的id匹配(只有關係),您可以使用SCOPE_IDENTITY()
並保持從XML ID到SQL ID的映射,以將正確的外鍵列插入到其他表中。
我建議使用'SCOPE_IDENTITY()'而不是'@@ IDENTITY' –
(請參閱[本博客文章](http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs- scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record /)至於爲什麼... –
@marc_s,對,更新了答案。 – svick
+1或SQL Server集成服務 - 爲什麼重複一遍又一遍? –