同一台电脑上,实现互相调用sql2000与2005遇到的坑

最近做一个对接系统的项目,实现客户的系统(SQL 2000)关于我们的系统(SQL 2005)对接的开发,鉴于客户系统升级麻烦,不可以实现SQL Server2000升级操作

遇到的坑与问题解决方法

1.实现数据的对接

  创建连接服务器,注意SQL Server2000与SQL Server2005的安装顺序,与是否默认实例(local),是否新建实例

2.sql的语法

  2-1  SQL Server2000 在语法过程中,不允许使用注释语法" --  ",这样默认会注释掉" --"之后的代码部分,即" -- "之后的代码不会执行

  2-2   SQL Server 触发器调用 SQLServer2005的存储过程, 报错,

      

      错误信息:[OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。] OLE DB 错误跟踪[OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。 消息7391,级别16,状态1,过程tru_orderMaster,第3 行 该操作未能执行,因为OLE DB 提供程序'SQLOLEDB' 无法启动分布式事务。

      解决方法1: 未成功解决 ,详情参考 https://www.cnblogs.com/xy6521/articles/1600975.html  

      s1:设置连接服务器的属性"RPC ",

      s2:设置MSDTC 的属性内容

      s3:确认端口

       解决方法2:  更改sql的语法,使用非 分布式事务,即 在sql server 2000的语法中直接操作sql server 2005的表信息,不执行sql server2005的存储过程-触发器等 事务操作'

      问题:关于sql 低版本的调用高版本的事务的可行性,待测试

3. 不同界面的设定

  3-1 开发环境为界面的,已有的环境,主要为数据库之间的传递,在存储过程中,有嵌套调用链接服务器情况,(尽量避免).

  3-2 报错:异类查询要求为连接设置 ANSI_NULLS 和 ANSI_WARNINGS 选项,这将确保一致的查询语义

  解决方法:

  

  在触发器等,SQL语句中添加  set ansi_nulls on   set ansi_warnings on

 

posted on 2018-10-15 16:22  沐沐细雨  阅读(179)  评论(0编辑  收藏  举报

导航