我正在使用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
的使用上。
答案 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');