none
SQL Server 和链接服务器Oracle 进行查询时由于数据类型不一致导致不能正确的进行比较? RRS feed

  • 问题

  • 数据库原来的版本是 SQL Server 2008 R2,最近刚升级到2014,原来使用一个语句

    select A.* from A left join server1..abc.B on b.id=a.id where b.id is null

    来查询在B表中不存在的列,升级到2014之后这个语句不能返回正确的结果了,A.id 是 varchar(50),oracle 表中b.id 是varchar2(40)类型,如果我把语句强制加上类型转换如

    select A.* from A left join server1..abc.B on cast(b.id as varchar(50))=a.id where b.id is null

    这样的语句就能查询成功了,非常奇怪,我很多存储过程里都是直接进行的比较,如果每次都要进行显示转换也太麻烦了吧? 有什么好的解决方案吗?

    SQL Server 排序规则Chinese_PRC_CI_AS

    链接服务器通过Oracle.oledb 和 oracle 链接,链接服务器的属性设置里 排序规则兼容 选择的是 False

    2017年8月21日 6:31

全部回复

  • 试试调整数据库的兼容级别
    2017年8月22日 1:04
  • Hi prance,

     

    这个问题应该是升级到SQL Server 2014之后,自动数据类型转换出现的问题,新的SQL Server中,Oracle中的varchar2会被转换为相同位数的varcharSQL Server中。

     

    请尝试调整数据库的兼容级别,但是这个不是一个长远的解决方法,在新版本的SQL Server中可能都会出现这样的问题,最好添加一下强制类型转换。

     

    Best Regards,

    Teige

     


    MSDN Community Support<br/> Please remember to click &quot;Mark as Answer&quot; the responses that resolved your issue, and to click &quot;Unmark as Answer&quot; if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact <a href="mailto:MSDNFSF@microsoft.com">MSDNFSF@microsoft.com</a>.

    2017年8月22日 6:34
    版主