链接服务器查询的COUNT(*)不准确



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

当我运行这个查询时,我得到了11990行的数据集:

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

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

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

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

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

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

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

我猜它与默认的fetchsize 有关

FetchSize-指定提供程序一次将提取的行数(提取数组(。它必须根据数据大小和网络的响应时间进行设置。如果该值设置得太高,那么这可能会导致在执行查询期间等待更多时间。如果该值设置得太低,那么这可能会导致更多的数据库往返。有效值为1到429496和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');

最新更新