Tsql “按订单”如何更改我的结果?使用T-SQL、OPENQUERY、选择进入

Tsql “按订单”如何更改我的结果?使用T-SQL、OPENQUERY、选择进入,tsql,linked-server,Tsql,Linked Server,我在SQL Server 2008上有一个计划的AM进程,该进程使用链接服务器从Oracle导入数据。我使用drop table覆盖从Oracle导入的数据,然后选择into模式 显然,订单的出现影响了我的最终结果!看一看 --This works fine to give me the one row I'm expecting from the newly imported table: drop table t1; SELECT * into t1 fROM OPENQUERY(ODBC_

我在SQL Server 2008上有一个计划的AM进程,该进程使用链接服务器从Oracle导入数据。我使用drop table覆盖从Oracle导入的数据,然后选择into模式

显然,订单的出现影响了我的最终结果!看一看

--This works fine to give me the one row I'm expecting from the newly imported table:
drop table t1;
SELECT * into t1 fROM OPENQUERY(ODBC_CSRPT,'
select 
 EXTERNAL_ORGANIZATION_ID  
 ,ORGANIZATION_DESC
 ,STATE
from sysadm.uv_CS_EXTERNAL_ORGANIZATIONS
order by EXTERNAL_ORGANIZATION_ID asc ');
go

select * from t1 
where external_organization_id = '1000107'
go
但下面的代码不返回任何行。我的组织1000107现在不见了

drop table t1;
SELECT * into t1 fROM OPENQUERY(ODBC_CSRPT,'
select 
 EXTERNAL_ORGANIZATION_ID  
 ,ORGANIZATION_DESC
 ,STATE
from sysadm.uv_CS_EXTERNAL_ORGANIZATIONS ');
go

select * from t1 
where external_organization_id = '1000107'
go

正如您所看到的,惟一改变的是orderby子句的存在。另一个小贴士是,无论order by是否存在,链接服务器查询都返回相同的行数51225行。有什么想法吗?

可能需要在Oracle上重新计算索引?

是否有设置行数这样的选项生效?特别是在链接的Oracle数据库上。我已经好几年没有和甲骨文做过任何事情了,所以我不记得他们的细节。

似乎我在51225行遇到了某种上限。我不控制甲骨文方面,我组织的另一个部门控制。他们的一位员工说,精确查询应该返回51324行

所以,真正发生的是,我离完整的结果集还差99行。我的ORDERBY子句重新排列了结果的优先级,碰巧给了我想要的那一行。当然,不幸的是,它仍然在冲击99个其他结果

我不知道51225这个数字有什么意义。我很难想象链接服务器的sql server配置会以某种方式进行设置,我只是在设置时使用了默认值

更糟糕的情况是,我将导入拆分为两个查询,顺序相反,因此我涵盖了所有基础。我真的需要弄清楚那顶神秘的51225帽子的底细


非常感谢所有的投入

基于提供程序的链接服务器:用于OLE DB的Oracle提供程序而不是基于本地系统ODBC连接Microsoft OLE DB提供程序用于ODBC驱动程序第一次尝试返回完整的结果集

出于某种原因,ODBC连接上必须有一个关于可以返回的最大行数的下限。我找到的唯一设置是获取缓冲区大小,我尝试加倍,返回的行数仍然相同

对于这个查询,我将只使用另一个链接服务器


再次感谢大家的投入

那么,您每次运行此批处理时都会删除该表……是否可能每种方法的数据类型都不同?这将有助于解释为什么第二个查询不返回任何内容。在每次处理之后,t1中是否也有51225行?是否有可能导入在实际数据进入表之前完成,并且通过对导入选择进行排序,您要查找的记录位于顶部页面之一,而在导入无序数据时,记录可能在最后一页中?@Gratzy,行数在不同方法之间匹配。@anon我会对表和链接查询进行并集,如果得到的行数更多,则应得到51225行,如果数据存在差异,即如果有51227行,则两行之间有一行不同。然后我会追踪不同的行,看看这是否为我指明了正确的方向