异构数据库同步,存储过程中不能使用openQuery?

mhhaifeng 2012-12-03 02:53:15
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 不能用在存储过程中吗?
...全文
238 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2012-12-04
  • 打赏
  • 举报
回复
也就是你还没连上所以报错?
mhhaifeng 2012-12-04
  • 打赏
  • 举报
回复
事实的答案是 存储过程 中带有OPENQUERY 那么 sql server 必需已连接上 异构数据库 并具 OPENQUERY(sHisDB,' select * from Interface_Patient_Mi') 中的 sHisDB连接有效 异构数据库中的Interface_Patient_Mi 存在 才可创建存储过程成功 存储过程 好像把 OPENQUERY(sHisDB,' select * from Interface_Patient_Mi')当成 本地表了 创建过程中还再次进行了一次语法检验 把OPENQUERY 当成本地表的方法检验 如果没连接上异构数据就会出错 真是比较奇特的逻辑
lenovore 2012-12-03
  • 打赏
  • 举报
回复
很显然删除链接服务器语句有问题 EXEC sp_droplinkedsrvlogin '" + servername + "',NULL; EXEC sp_dropserver '" + servername + "','droplogins' "
kingtiy 2012-12-03
  • 打赏
  • 举报
回复

--- exec sp_dropserver 这个是删除链接服务器吧.
xuam 2012-12-03
  • 打赏
  • 举报
回复
用动态语句 exec(.....)

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧