OPENQUERY throwing "Out of memory" error: limit rows until all are loaded
OPENQUERY throwing "Out of memory" error: limit rows until all are loaded
在 SQL Server 2016 中我有一个存储过程。在此 SP 中,我想通过使用以下语句从链接服务器 (PostgreSQL) 的视图中获取所有数据:
INSERT INTO myTable
SELECT Field1,
Field2,
Field3,
...
FROM OPENQUERY(myServer, 'SELECT * FROM myDatabase.mySchema.myView')
当我这样使用它时,几分钟后我收到以下错误消息:
Out of memory while reading tuples.
我更改了 OPENQUERY
中的 SELECT
语句,只获取前 1000000 行,效果很好:
SELECT * FROM myDatabase.mySchema.myView ORDER BY Field1 LIMIT 1000000
现在我不确定获取所有数据的最实用方法是什么。我可以插入前 1000000 行,然后使用 OFFSET
插入下 1000000 行。但我认为这不是一个很好的解决方案,因为我不知道总行数是多少。循环是另一种方式,但我真的不知道这是否是实现我想要的最简单的方式。
如有任何帮助,我们将不胜感激。
我认为您正在使用 odbc 驱动程序创建链接服务器。这是 psqlODBC 驱动程序内存配置的问题。
您更改了打开数据源的 odbc 驱动程序设置
按"Configure",然后在打开的数据源详情中
"Options" 节 select "Datasource"
并在打开的 window 中检查 "use declare/fetch"。
在 SQL Server 2016 中我有一个存储过程。在此 SP 中,我想通过使用以下语句从链接服务器 (PostgreSQL) 的视图中获取所有数据:
INSERT INTO myTable
SELECT Field1,
Field2,
Field3,
...
FROM OPENQUERY(myServer, 'SELECT * FROM myDatabase.mySchema.myView')
当我这样使用它时,几分钟后我收到以下错误消息:
Out of memory while reading tuples.
我更改了 OPENQUERY
中的 SELECT
语句,只获取前 1000000 行,效果很好:
SELECT * FROM myDatabase.mySchema.myView ORDER BY Field1 LIMIT 1000000
现在我不确定获取所有数据的最实用方法是什么。我可以插入前 1000000 行,然后使用 OFFSET
插入下 1000000 行。但我认为这不是一个很好的解决方案,因为我不知道总行数是多少。循环是另一种方式,但我真的不知道这是否是实现我想要的最简单的方式。
如有任何帮助,我们将不胜感激。
我认为您正在使用 odbc 驱动程序创建链接服务器。这是 psqlODBC 驱动程序内存配置的问题。
您更改了打开数据源的 odbc 驱动程序设置
按"Configure",然后在打开的数据源详情中
"Options" 节 select "Datasource"
并在打开的 window 中检查 "use declare/fetch"。