none
求助:sql 2008通过链接服务器访问sql 2000表报错的问题 RRS feed

  • 问题

  • 在sql 2008里建一个链接服务器指向sql 2000,访问其中一个表的数据,结果报出如下错误:

        消息 7339,级别 16,状态 1,第 1 行
    链接服务器 '172.16.7.186\DB2' 的 OLE DB 访问接口 'SQLNCLI10' 返回了对列 '[172.16.7.186\DB2].[rdrollup].[dbo].[itemdescription].itemshortdesc' 无效的数据。

    请问这个如何解决? 

     

    之前sql 2000通过链接服务器访问同样的表是正常的.

     

     

    2010年10月15日 10:36

全部回复

  • Can you query other tables via linked server?
    2010年10月15日 12:56
  • 我调查了原数据,从SQl 2000 通过linked server去访问这个表的时候是可以拿到数据,不会报错,但通过SQL 2008建立的linked server去访问的时候,当记录返回到4500条的时候,就会报错.进一步调查,发现是数据源那边有下面这样的记录,导致错误的是itemshortdesc字段的值:

      itemid               itemshortdesc                                               
    -------------------- ------------------------------------------
      06GB-20              ????? ??                                         

    应该是数据不合法造成,但是同样的数据对于SQl 2000来说能访问,对于SQ 2008来说就是不合法的,能不能也让SQL 2008也像sql 2000那样,把这些数据也认为是合法的呢?

    谢谢!           

    2010年10月18日 4:11
  • 1. 试试使用 openquery

    2. 确认你的 sql 2000 的补丁版本, 之前曾经遇到过链接服务器的问题, 应该是与楼主的错误类似, 是一个 bug, 安装了 sp4 后解决

    2010年10月18日 4:29
  •   晕,刚才了解了下,原数据那边是sql 2008,不是sql 2000,也就是通过sql 2000  用连接服务器访问SQl 2008是对的,用sql 2008访问sql 2008反而报错.
    2010年10月18日 5:42
  •   使用openquery也报错
    2010年10月18日 5:45
  • What are connection settings in sql2k8?
    2010年10月18日 13:49
  • 2000 访问 2008, 是否定义的数据类型是 2000不支持的呢?

    同样应该检查 service pack 的安装情况

    2010年10月19日 4:11
  •   我这里再描述下情况吧:

          原数据是运行在SQl 2008上的.  以下是使用情况:

             1,从一个SQL 2000实例建立连接服务器, 访问上面提到的运行在sql 2008的数据库中的一个表,正确,可以拿到全部数据;

            2,从另一个SQl 2008 实例建立连接服务器, 访问上面提到的运行在sql 2008的数据库中的一个表,错误,只能拿到4599条记录,然后报错,报的错误就是:

                  消息 7339,级别 16,状态 1,第 1 行
    链接服务器 '172.16.7.186\DB2' 的 OLE DB 访问接口 'SQLNCLI10' 返回了对列 '[172.16.7.186\DB2].[rdrollup].[dbo].[itemdescription].itemshortdesc' 无效的数据。

     

        经过检查,原表中有字段的数据是如下格式:

     itemid               itemshortdesc                                               
    -------------------- ------------------------------------------
      06GB-20              ????? ??          

     

    导致了上面使用情况2中的错误.如果把这些非法数据删除,更新或是过滤,则语句可以正确完成,不会报错,可以通过使用如下语句来绕开该问题:

    select * from       [172.16.7.186\DB2].[rdrollup].[dbo].[itemdescription] where temshortdesc noe like '%?%'

    但这样会过滤掉部分正确数据,而且也没有解决此问题. 上午又尝试按建立连接服务器的SQl 2008实例上安装了SP2,问题依旧.

     

         

    2010年10月19日 5:14
  •    以下是在SQl2k8中的connection settings:   

                  排序规则兼容           true

                 数据访问             true

                RPC                                               false

                 RPC out                                      false

                   使用远程排序规则        true

                   排序规则名称          无

         连接超时值

         查询超时值 

         为RPC 启动针对分布式事物的升级  true

     

    其他都是false

     

    访问接口用的是 micorsoft OLE DB provider for SQL Server

     

     

    2010年10月19日 5:21
  • 我也遇到同样问题。 期待高手解答!
    2010年11月18日 14:37