HR服务器: 操作系统->32位Windows2000 SP4 数据库->32位SQL Server2000
OA服务器: 操作系统->64位Windows2003 SP2 数据库->64位SQL Server2005
OA项目中,需要从HR服务器中取得用户的手机号。对这种情况,我以前都是使用建立链接服务器的方式,于是,很快地写好脚本,把HR服务器注册了:
exec sp_dropserver 'HRServer', 'droplogins'
exec sp_addlinkedserver 'HRServer', '', 'SQLOLEDB', '10.101.166.38'
exec sp_addlinkedsrvlogin 'HRServer', 'false', null, 'sa', 'buaa369'
然后执行查询语句:
select top 10 * from HRServer.testdb.dbo.EmpContactMethod
结果,并没有出现熟悉的显示记录画面,直接报错了。。。(英文版)
OLE DB provider "SQLNCLI" for linked server "hrserver" returned message "Login timeout expired".
OLE DB provider "SQLNCLI" for linked server "hrserver" returned message "An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections.".
消息 53,级别 16,状态 1,第 0 行
Named Pipes Provider: Could not open a connection to SQL Server [53].
此时,如果在企业管理器中注册这个HR服务器,做相应的查询都没问题啊。。。。
这很闹心呐。
到CSDN上第一次求助,说是版本不对,需要SQL Server2000需安装SP3或SP4补丁。
附版本查询脚本:SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')
版本号对应:
8.00.194 SQL Server 2000 RTM
8.00.384 SQL Server 2000 SP1
8.00.534 SQL Server 2000 SP2 November 30th, 2001
8.00.760 SQL Server 2000 SP3
8.00.2039 SQL Server 2000 SP4
按这个提示,把SP4补丁打上了,继续操作。噫,不管用,还是不对。
找了个数据库方面比较熟悉的人员,通过远程协助,整了半天,还是没搞定,
没办法,只有另想办法。猜想是不是语言的问题,还有就是位数的问题。因为在我机器上,同样的操作就正常。我机器上数据库与OA数据库,就相差语言和位数。
于是找到另一台测试机器,装的64位操作系统。由于未找到英文版,32位和64位的SQL Server2005,于是使用我正在使用的SQL Server2005开发版,先装了32位的版本,测试,一切正常。卸载掉32位版本,装上64位版本,测试结果依然是出错:
链接服务器"hrserver"的 OLE DB 访问接口 "SQLNCLI" 返回了消息 "未指定的错误"。
链接服务器"hrserver"的 OLE DB 访问接口 "SQLNCLI" 返回了消息 "在该服务器上找不到完成该操作所需的存储过程。 请与系统管理员联系。"。
消息 7311,级别 16,状态 2,第 1 行
无法获取链接服务器 "hrserver" 的 OLE DB 访问接口 "SQLNCLI" 的架构行集 "DBSCHEMA_TABLES_INFO"。该访问接口支持该接口,但使用该接口时返回了失败代码。
看样子真与位数有关系了。但怎么解决还是个问题啊。
第二次求助CSDN,发帖,结果马上就出结果了。
原来这是Microsoft的一个BUG。就存在64位SQLServer2005访问32位SqlServer2000 SP4的问题。
http://support.microsoft.com/kb/906954/zh-tw
http://support.microsoft.com/?scid=kb%3Bzh-cn%3B906954&x=15&y=5
原因:
出现此问题由于系统存储过程未升级。
解决方法:
手工执行SP4中,更新系统存储过程的脚本:instcat.sql
到此,问题算是完美解决了。
------------------------------------------------------------------------------------------------------
这问题断断续续花了好长时间才解决,希望能对遇到相同问题你有所帮助。因为现在使用Sqlserver2000的人少了,这方面问题的解决方法也难找了。