链接服务器查询中的COUNT(*)错误

时间:2020-07-30 18:33:06

标签: sql sql-server linked-server

我正在使用OraOLEDB.Oracle提供程序通过SQL Server中的链接服务器对Oracle进行查询。

运行此查询时,我得到了11,990行的数据集:

SELECT * 
FROM OPENQUERY([ORA_LINK], 'SELECT * FROM DB1.MY_TABLE');

但是,此COUNT(*)查询返回的值是 200 ,而不是11,990:

SELECT COUNT(*) 
FROM OPENQUERY([ORA_LINK], 'SELECT * FROM DB1.MY_TABLE');

链接服务器或提供程序设置中是否存在某些限制?

UPDATE :如果我直接访问该表,则会得到正确的计数:

SELECT COUNT(*) 
FROM [ORA_LINK]..[DB1].[MY_TABLE]

所以看来问题出在OPENQUERY的使用上。

1 个答案:

答案 0 :(得分:0)

我猜这与默认fetchsize

有关

FetchSize-指定提供程序一次将获取的行数(获取数组)。必须根据数据大小和网络的响应时间进行设置。如果该值设置得太高,则在执行查询期间可能会导致更多的等待时间。如果该值设置得太低,则可能导致数据库往返更多。有效值为1至429,496和296。默认值为100。


1在SQL Server端实现它

SELECT *
INTO #tmp
FROM OPENQUERY([ORA_LINK], 'SELECT * FROM MY_TABLE');

SELECT COUNT(*) FROM #tmp;

2正在运行COUNT(*)或Oracle方面;

SELECT *
FROM OPENQUERY([ORA_LINK], 'SELECT COUNT(*) FROM MY_TABLE');