同一台电脑上,实现互相调用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