不同版本操作系统和数据库的之间链接,和操作
缘由:知识库个人计划积分数据源为157数据库,但基于BI等系统,34上复制了一份单独的知识库个人计划积分,所以每次157发生变化,要人工的改变34数据库,这样操作起来很麻烦。
所以在157写了个触发器,同步更新34数据库的个人计划积分。但遇到了种种问题。
该问题自动化的整体思路:在157计划计分表中建立触发器,同步更新34数据库(看是很简单,实施有点麻烦)
问题一:64位Windows2003,SqlServer2005,链接32位Windows2003,SqlServer2000,无法链接
错误提示:
链接服务器"nebula"的 OLE DB 访问接口 "SQLNCLI" 返回了消息 "未指定的错误"。
链接服务器"nebula"的 OLE DB 访问接口 "SQLNCLI" 返回了消息 "在该服务器上找不到完成该操作所需的存储过程。 请与系统管理员联系。"。
消息 7311,级别 16,状态 2,第 1 行
无法获取链接服务器 "nebula" 的 OLE DB 访问接口 "SQLNCLI" 的架构行集 "DBSCHEMA_TABLES_INFO"。该访问接口支持该接口,但使用该接口时返回了失败代码。
解决方案:
1.确保被链接的sqlserver2000安装了sp4,否则请先安装
2.安装完成后,运行cmd,执行如下命令osql -U sa -P ovenjackchain -S 192.168.0.34 -i C:\instcat.sql
注意用户名和密码,最后的C:\instcat.sql,如果你安装了sp4,那么这个文件肯定存在,自己搜索出来。
3.回车,哗哗哗的一幕,最后提示成功!
4.执行成功后,即可建立两台数据库的链接了(如何建立,请搜索知识库)
问题二:创建触发器,创建失败
错误提示:包含的前缀超出了最大限值。最多只能有 2 个
触发器如下:
解决方案:将触发器执行的代码改成存储过程执行,存储过程可以成功创建,select * into,和drop是不可以在链接中使用的
问题三:更新157个人积分计划,测试,但杯具再次上演
错误提示:该伙伴事务管理器已经禁止了它对远程/网络事务的支持
解决方案:在两台服务器上同时执行如下操作

执行完成后,再次测试,OK
一个小小的问题,背后隐藏着三个大问题,特此一记!!!
所以在157写了个触发器,同步更新34数据库的个人计划积分。但遇到了种种问题。
该问题自动化的整体思路:在157计划计分表中建立触发器,同步更新34数据库(看是很简单,实施有点麻烦)
问题一:64位Windows2003,SqlServer2005,链接32位Windows2003,SqlServer2000,无法链接
错误提示:
链接服务器"nebula"的 OLE DB 访问接口 "SQLNCLI" 返回了消息 "未指定的错误"。
链接服务器"nebula"的 OLE DB 访问接口 "SQLNCLI" 返回了消息 "在该服务器上找不到完成该操作所需的存储过程。 请与系统管理员联系。"。
消息 7311,级别 16,状态 2,第 1 行
无法获取链接服务器 "nebula" 的 OLE DB 访问接口 "SQLNCLI" 的架构行集 "DBSCHEMA_TABLES_INFO"。该访问接口支持该接口,但使用该接口时返回了失败代码。
解决方案:
1.确保被链接的sqlserver2000安装了sp4,否则请先安装
2.安装完成后,运行cmd,执行如下命令osql -U sa -P ovenjackchain -S 192.168.0.34 -i C:\instcat.sql
注意用户名和密码,最后的C:\instcat.sql,如果你安装了sp4,那么这个文件肯定存在,自己搜索出来。
3.回车,哗哗哗的一幕,最后提示成功!
4.执行成功后,即可建立两台数据库的链接了(如何建立,请搜索知识库)
问题二:创建触发器,创建失败
错误提示:包含的前缀超出了最大限值。最多只能有 2 个
触发器如下:
01 |
create trigger T_Changescore |
02 |
on Y_TaskScoreplanning for update , delete , insert as |
03 |
begin |
04 |
drop table nebula.Nebula.dbo.taskplaning; |
05 |
insert into nebula.Nebula.dbo.taskplaning |
06 |
select case [任务型态] when '投-知识库学习' then '学习' when '投-知识库发展' then '发展' end tasktype, case 节点负责人 when '姚亮' then '姚亮' else substring (节点负责人,3,100) end taskman,年度 year , isnull (m01,0) m01, isnull (m02,0) m02, isnull (m03,0) m03, isnull (m04,0) m04, isnull (m05,0) m05, isnull (m06,0) m06, isnull (m07,0) m07, isnull (m08,0) m08, isnull (m09,0) m09, isnull (m10,0) m10, isnull (m11,0) m11, isnull (m12,0) m12,合计 total |
07 |
from Y_TaskScoreplanning |
08 |
where ([任务型态]= '投-知识库学习' or [任务型态]= '投-知识库发展' ) and 年度= '2011' |
09 |
and substring (节点负责人,3,100) not in ( 'xxxx ' ) |
10 |
end |
解决方案:将触发器执行的代码改成存储过程执行,存储过程可以成功创建,select * into,和drop是不可以在链接中使用的
01 |
create trigger T_Changescore |
02 |
on Y_TaskScoreplanning for update , delete , insert as |
03 |
begin |
04 |
exec P_UpdateNebulaScore |
05 |
end |
06 |
07 |
create proc P_UpdateNebulaScore as |
08 |
begin |
09 |
10 |
delete nebula.Nebula.dbo.taskplaning; --注意 |
11 |
insert into nebula.Nebula.dbo.taskplaning --注意 |
12 |
select case [任务型态] when '投-知识库学习' then '学习' when '投-知识库发展' then '发展' end tasktype, case 节点负责人 when '姚亮' then '姚亮' else substring (节点负责人,3,100) end taskman,年度 year , isnull (m01,0) m01, isnull (m02,0) m02, isnull (m03,0) m03, isnull (m04,0) m04, isnull (m05,0) m05, isnull (m06,0) m06, isnull (m07,0) m07, isnull (m08,0) m08, isnull (m09,0) m09, isnull (m10,0) m10, isnull (m11,0) m11, isnull (m12,0) m12,合计 total |
13 |
from Y_TaskScoreplanning |
14 |
where ([任务型态]= '投-知识库学习' or [任务型态]= '投-知识库发展' ) and 年度= '2011' |
15 |
and substring (节点负责人,3,100) not in ( '陆趣趣' , '姜敏' , '孙亚峰' , '魏文' , '梁晓东' ) |
16 |
17 |
end |
问题三:更新157个人积分计划,测试,但杯具再次上演
错误提示:该伙伴事务管理器已经禁止了它对远程/网络事务的支持
解决方案:在两台服务器上同时执行如下操作

执行完成后,再次测试,OK
一个小小的问题,背后隐藏着三个大问题,特此一记!!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架