我正在使用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');