【发布时间】:2019-01-24 19:46:24
【问题描述】:
我正在执行简单的插入查询,如下所示: 插入到 tbl_destination ... SELECT ... FROM [SomeOtherLinkedServer].tbl_source
尽管 SELECT 返回 9'000'000 行,但它会导致将 3'000'000 行插入到目标表中。可能是什么原因? 我正在使用 SQL Servers 2005 标准版。目标表和源表位于两个不同的 SQL 服务上。不显示错误消息。目标表用作临时数据堆 - 它没有 prim。关键,没有索引。我检查了 tbl_destination 的磁盘空间和可用空间量 - 大量 GB。奇怪..我将不胜感激任何建议!
编辑: 谢谢你到目前为止的建议。 当我在本地(在链接服务器上)和登录到链接服务器本身时运行 SELECT COUNT(*) 时,它显示了 9M 行。 但是,当我在链接服务器上运行实际的 SELECT ... 时:
SELECT ... FROM [SomeOtherLinkedServer].tbl_source
结果是 3M 行并且没有错误消息。 登录到远程服务器时执行相同的查询:
SELECT ... FROM tbl_source
还返回了 3M 行,但这次带有错误消息(因此在执行使用链接服务器上的表的查询时,似乎没有显示所有错误消息):
Msg 701, Level 17, State 123, Line 1
There is insufficient system memory to run this query.
所以现在看起来很明显这是内存问题。有什么办法(无需在服务器上安装更多内存)来克服这个问题 - 将此查询的整个结果插入到表中?谢谢! 还有一件事- tbl_source 不是真正的表,它是一个视图。不幸的是,由其他人维护,因此优化其内部结构不是一种选择(至少目前如此)。
【问题讨论】:
-
您能否在执行 INSERT 和 SELECT 时发布您的实际查询
-
您是否比较了您正在生成的两组数据?较大的集合是否只是较小集合中每一行的三个副本?
-
看一下管理工作室的日志
标签: sql sql-server