簡體   English   中英

選擇發行SQL Server

[英]select into issue of SQL Server

我正在使用SQL Server 2008,並且需要在同一SQL Server實例上從一個數據庫的一個表中選擇所有數據到另一個數據庫的另一個表中。

這是我使用的腳本。 服務器將耗盡內存。 數據量很大-磁盤上的表大小約為50G。 任何簡單的替代解決方案或任何降低內存消耗的解決方案都可以。 該服務器具有16G物理RAM,並且為x64。

這是我正在使用的語句,

insert into [TargetDB].[dbo].[Orders]
select *
from [SourceDB].[dbo].[Orders];

任何快速簡單的解決方案?

預先感謝喬治

添加一些分區,這樣您就不必立即進行全部操作。 一次獲取一個月的數據,或以特定數字結尾的所有ID :。

這樣,每批都變得更小。

分批復制

INSERT INTO [TargetDB].[dbo].[Orders]
SELECT TOP 100 *
FROM [SourceDB].[dbo].[Orders] S
WHERE NOT EXISTS
(
 SELECT 1 FROM [TargetDB].[dbo].[Orders] T1
 WHERE T1.OrderId = S.orderID
)

這應該以100為批次進行,您可以調整它以適合需要處理的記錄數。 此代碼確實假定您具有某種形式的“唯一值”,例如要在數據復制過程中鍵入的OrderId

復制范圍

如果您有一個字段可以用來選擇“范圍”(例如OrderDate),請先運行類似以下的查詢

SELECT OrderDate, COUNT(1)
FROM [SourceDB].[dbo].[Orders]

看看有多少個不同的值,以及每個不同的值有多少條記錄。 那應該允許您選擇一些范圍(例如2009-01-01-> 2009-01-31),然后使用范圍查詢在以下范圍內復制數據:

INSERT INTO [TargetDB].[dbo].[Orders]
SELECT *
FROM [SourceDB].[dbo].[Orders] 
WHERE OrderDate BETWEEN '2009-01-01 00:00:00.000' AND '2009-01-31 23:59:59.997'

您可能要考慮使用BCP批量復制數據。

暫無
暫無

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

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