2010-07-02 8 views
2

我有一個數據庫每天增加一百萬行。每天我都想運行一個查詢來抽出最老的行(在數據庫中留下大約一千萬),然後將它們移動到一個存檔數據庫中。將數百萬行從一個sql server數據庫複製到另一個數據庫的最佳方法是什麼?

在sql server(bcp,openrowset等)中這樣做有很好的記錄方式,但從我所知道的,所有這些方法都是從數據文件中獲取所有行。我只想複製行的一個子集,我找不到任何快速的方法。

+0

它們在不同的服務器上還是在同一臺服務器上?另外,您是否也想從源中刪除數據? – Anon246 2010-07-02 21:21:46

回答

2

我會建議考慮一個SSIS包。您可以精確控制要複製的行,您可以按照您選擇的事務大小來執行此操作,並且可以快速進行批量插入。

2

做到這一點,最簡單的方法是充分利用合格的名稱

INSERT INTO ArchiveDatabase..TableName 
SELECT * 
FROM ProductionDatabase..TableName 
WHERE EntryDate <= dateadd(mm, -6, current_timestamp) 

要通過大量的數據拷貝它往往是更好地做到這一點「基於塊」的查詢。在純TSQL做到這一點,最簡單的方法是這樣的:

DECLARE @rowcount int 
    SET @rowcount = 1 
    WHILE @rowcount <> 0 
    BEGIN 
     INSERT INTO ArchiveDatabase..TableName 
     SELECT TOP (100000) * 
     FROM ProductionDatabase..TableName 
     WHERE EntryDate <= dateadd(mm, -6, current_timestamp) 
     SET @rowcount = @@ROWCOUNT 
    END 

基本上限制查詢到100K行與SELECT TOP()條款和不斷循環,直到沒有更多的記錄複製過來。 (@@ROWCOUNT返回受影響的記錄數。)

如果數據庫位於不同的SQL Server上,則可以設置「鏈接服務器」並將服務器引用添加到對象名稱。完全限定對象名稱的格式是<Server>.<Database>.<Owner>.<Object>

相關問題