簡體   English   中英

如何在SQL Server中將數據從一個表復制到另一個表

[英]How to copy data from one table to another in SQL Server

我正在嘗試按計划的傳輸將數據從受信任的SQL Server 2012上的視圖復制到SQL Server本地實例上的 在這種情況下,最佳做法是什么?

到目前為止,我提供了以下選項:

  1. 用C#或VB編寫可執行程序以刪除現有的本地表,從遠程數據庫中查詢數據,然后將結果寫入本地數據庫中的表。 該可執行文件將在計划任務上運行。

  2. 使用BCP將數據復制到文件,然后上傳到本地表。

  3. 使用SSIS

注意:本地和遠程SQL Server之間的連接非常慢。

由於傳輸是有計划的,因此我想您希望此數據是最新的。

我的建議是使用SSIS並使用SQL Agent計划它。 如果您編寫了C#程序,我認為您將獲得的最佳結果是模仿SSIS的程序。 而且,SSIS隨時隨地都是很容易修改的工作流程。

無論哪種方式,要使此類程序/程序包都是最新的,您都必須回答一個重要的問題: 源表是可更新的還是像日志(僅插入)? 這個問題是如此重要,因為它將決定您如何從源表中獲取新更新。 例如,如果表代表日志,則您很可能會使用主鍵來檢測新記錄,如果不是,則可能要查找代表更新日期/時間的列。 如果您有權更改源表,則可能需要添加代表行版本的timestamp列( timestampdatetime不同)

對於構建SSIS包,它將主要包含以下組件:

  1. Execute SQL Task以從源表獲取最大值。

  2. Execute SQL Task以獲取應從目標表開始的最后一個值。 您可以通過從目標表中選擇最大值來獲得該值,或者如果該表很大,則可以將該值存儲在另一個表(例如配置表)中。

  3. Data Flow ,該數據Data Flow將數據從源表中移至步驟2中獲取的值之后,將其從步驟2中獲取的值開始。

  4. 如果選擇了此技術,請Execute SQL Task以將新的最大值更新回配置表。

BCP可以用於導出數據壓縮和通過網絡傳輸,然后可以將其導入到SQL的本地實例中。 同樣,對於BCP,數據導出可以包含在較小批量的數據中,以便於數據管理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM