sql server 2000 同步oracle中的数据

if exists(select 1 from master..sysservers where srvname='sHisDB') 
 exec sp_dropserver 'sHisDB','droplogins' exec sp_addlinkedserver 'sHisDB', ' ', 'MSDAORA.1', 'test'
 exec sp_addlinkedsrvlogin 'sHisDB', 'false',null, 'medrec', 'medrec'
创建sql server 2000到oracle 的连接
然后 想写个存储过程,同步数据
create proc Proc_Update_Patient
as
SELECT * FROM OPENQUERY(sHisDB,' select * from Interface_Patient_Mi')以上创建一个简单的存储过程 语法分析通过
但执行是 出现 
OLE DB 提供程序 'MSDAORA.1' 报错。 
[OLE/DB provider returned message: ORA-12541: TNS:no listener
]
错误 为什么  OPENQUERY 不能用在存储过程中吗?

解决方案 »

  1.   


    --- exec sp_dropserver 这个是删除链接服务器吧.
      

  2.   

    很显然删除链接服务器语句有问题
    EXEC sp_droplinkedsrvlogin '" + servername + "',NULL; 
    EXEC sp_dropserver '" + servername + "','droplogins' "
      

  3.   

    事实的答案是存储过程 中带有OPENQUERY
    那么 sql server 必需已连接上 异构数据库 
    并具 OPENQUERY(sHisDB,' select * from Interface_Patient_Mi')
    中的 sHisDB连接有效 
    异构数据库中的Interface_Patient_Mi 存在
    才可创建存储过程成功 
    存储过程 好像把 OPENQUERY(sHisDB,' select * from Interface_Patient_Mi')当成
    本地表了 创建过程中还再次进行了一次语法检验 把OPENQUERY 当成本地表的方法检验
    如果没连接上异构数据就会出错
    真是比较奇特的逻辑