繁体   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