2012-03-19 54 views
0

我在SourceDB(SQL Server數據庫)中有一個表tblSource,在TargetDB(SQL Server數據庫)中有一個表tblTarget。來自tblSource的數據必須移至tblTarget。 tblSource有位域來指示哪些數據被移動到tblTarget,所以當行被複制到tbltarget時,必須設置該標誌。我需要在C#中完成,但仍歡迎T-SQL的建議。我的問題是什麼都是可能的解決方案,哪個是最好的方法?複製表中的數據並更新它

回答

0

您可以使用TSQL MERGE語句,該語句將刪除在每一行上保留標誌的需要。

這可以從C#執行(如果需要的話)或包裝在存儲過程中。如果它們位於不同的服務器實例中,則可以創建鏈接服務器。

+0

tblTarget是在不同勢DB(無鏈接的服務器),將合併還能用嗎? – Arnet11 2012-07-04 04:39:43

+0

是的,它應該更容易。只需在數據庫名稱前添加SQL即可,例如而不是dbo.Table1,使用Database1.dbo.Table1 – 2012-07-04 10:32:55

0

我會爲此使用SQLBulkCopy類。我過去使用過它,並且運氣好。它足夠快速和易於使用。在這個鏈接上有很多示例代碼來幫助你開始。

+0

可以批量複製更新源數據庫? – Arnet11 2012-07-04 04:40:19

+0

@ user1279029對不起,不知道,我很久沒用過了。 – jcollum 2012-07-05 15:49:12

0

是否有任何理由爲什麼一個簡單的INSERT不是一個選項?

INSERT INTO tblTarget (destcol1, destcol2) 
SELECT (sourcecol1, sourcecol2) FROM tblSource 
+0

這兩個表都在不同的分貝(沒有鏈接的服務器) – Arnet11 2012-07-04 04:40:42

1

合併會爲你工作,如果在SQL Server 2008中 OUTPUT將爲您的工作與SQL Server 2005+。

您需要更新記錄以將您的位標誌和OUTPUT INSERTED *設置到目標表中。

只有當您計劃將選定記錄插入目標表時,纔可以考慮輸出選定的記錄。

這在性能方面很好,因爲這種技術需要SQL Server只遍歷記錄一次。

查看這些鏈接瞭解如何使用OUTPUT。

http://msdn.microsoft.com/en-us/library/ms177564.aspx & & http://blog.sqlauthority.com/2007/10/01/sql-server-2005-output-clause-example-and-explanation-with-insert-update-delete/

+0

tblTarget是在不同的數據庫(沒有鏈接服務器),將合併仍然工作? – Arnet11 2012-07-04 04:39:54

相關問題