存储过程连接远程数据库

fox1025701 2010-08-02 11:52:33
我想在本地数据库中建立一个存储过程,能连接到服务器上的数据库,并能实现增删改查功能,请高手赐教,在线等 谢谢
...全文
460 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodhj 2010-08-04
  • 打赏
  • 举报
回复
服务器是移动公司的。。。。
你确定移动公司的服务器上的允许远程访问打开了?
fox1025701 2010-08-04
  • 打赏
  • 举报
回复
都是2000 RPC服务开着的,madc原来就有 服务器是移动公司的
goodhj 2010-08-04
  • 打赏
  • 举报
回复
2000 or 2005?mdac从MS官网上下载来装过了?系统的Remote Procedure Call (RPC)服务都打开了?
fox1025701 2010-08-04
  • 打赏
  • 举报
回复
数据库版本都是一样的,操作系统也是一样的。。方法都是这样,结果怎么总是出错呢,难道跟服务器间的配置有关系吗
Austindatabases 2010-08-03
  • 打赏
  • 举报
回复
1------ 链接对方的数据库

USE [master]
GO
EXEC master.dbo.sp_addlinkedserver 建立服务器之间的连接

@server = N'CNTI1SRV141', 需要链接的服务器是哪个

@srvproduct=N'SQL Server' 采用的连接方式是哪个

GO


EXEC master.dbo.sp_addlinkedsrvlogin 对已经链接的服务器进行登录

@rmtsrvname = N'CNTI1SRV141', Remote的服务器是哪个

@locallogin = NULL , NULL 指定此项应用于连接到 rmtsrvname 的所有本地登录

@useself = N'False', FALSE 指定 rmtuser 和 rmtpassword 参数用于连接到指定 locallogin 的 rmtsrvname

@rmtuser = N'sa', 被登录的服务器的用户名

@rmtpassword = N'XXXXX' 被登录的服务器的密码


GO

Select * from [cnti1srv141].test.dbo.who 查询对方服务器上的数据库数据

Go

USE [master]


GO


SP_droplinkedsrvlogin 'CNTI1SRV141','sa' 切断远程登录服务器的连接名以及本地具有取消远程登录的用户


GO


USE [master]


GO


sp_dropserver 'CNTI1SRV141','droplogins' 删除远程登录服务器在本地服务器的记录

问题解决了sql server之间的远程数据库查询问题,但如果是其他数据库 mysql 或oracle 则需要使用OLEB的方式来协议连接

@srvproduct=N'SQL Server'

如果是oracle远程连接则使用 MSDAORA 如果是 access 可以使用microsoft.jet.OLEDB.4.0 ,mysql 可以采用 MSDASQL或SQLOLEDB


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/liuhuayang/archive/2010/08/02/5782719.aspx
goodhj 2010-08-03
  • 打赏
  • 举报
回复
你把这些回复都试下应该是可以了,Non-interface error: Provider not registered.]。。那你就看你用的SQL Server是什么版本?你数据库是SQL Server吧?本地和远程的都是吧?版本都一样吧?如果是的话那2000里驱动是用SQLOLEDB,2005以后的好像就不是了,你就查下sp_addlinkedserver sp_addlinkedsrvlogin sp_dropserver这三个系统过程在你那版本的帮助吧,版本不一样,参数就稍有差别,关于防火墙,如果你在本地用查询分析器能够访问远程数据库的话就没必要去设置了。
网络上基本没有现成的答案,有的是Idea
fox1025701 2010-08-03
  • 打赏
  • 举报
回复
没关防火墙是这个错误

sql server 拒绝或者不允许访问,

关了后就成这个错误了

服务器: 消息 7403,级别 16,状态 1,行 1
未能找到 OLE DB 提供程序 'SQLOLEDB ' 的注册表项。
OLE DB 错误跟踪[Non-interface error: Provider not registered.]。。
……
手工建个连接服务器也是这样。。。请问主要错误原因出在什么地方
htl258_Tony 2010-08-03
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 fox1025701 的回复:]
继续请教各位朋友,请问本地的服务器和远程的服务器该如何设置,想防火墙,是否允许远程,各种服务。。等等,虽然建立链接服务器成功了,但是点击左边表的时候总是出现这错误,
服务器: 消息 7403,级别 16,状态 1,行 1
未能找到 OLE DB 提供程序 'SQLOLEDB ' 的注册表项。
OLE DB 错误跟踪[Non-interface error: Provider not regi……
[/Quote]防火墙先关闭调试
fox1025701 2010-08-03
  • 打赏
  • 举报
回复
继续请教各位朋友,请问本地的服务器和远程的服务器该如何设置,想防火墙,是否允许远程,各种服务。。等等,虽然建立链接服务器成功了,但是点击左边表的时候总是出现这错误,
服务器: 消息 7403,级别 16,状态 1,行 1
未能找到 OLE DB 提供程序 'SQLOLEDB ' 的注册表项。
OLE DB 错误跟踪[Non-interface error: Provider not registered.]。。
……
或者是这个
sql server 拒绝或者不允许访问,

请朋友们给个详细的步骤,成功了另外加分 谢谢大家
fox1025701 2010-08-03
  • 打赏
  • 举报
回复
继续请教各位朋友,请问本地的服务器和远程的服务器该如何设置,想防火墙,是否允许远程,各种服务。。等等,虽然建立链接服务器成功了,但是点击左边表的时候总是出现这错误,
服务器: 消息 7403,级别 16,状态 1,行 1
未能找到 OLE DB 提供程序 'SQLOLEDB ' 的注册表项。
OLE DB 错误跟踪[Non-interface error: Provider not registered.]。。
……

或者是这个
sql server 拒绝或者不允许访问,

请朋友们给个详细的步骤,成功了另外加分 谢谢大家
Andy__Huang 2010-08-02
  • 打赏
  • 举报
回复
除了建立远程之外,还可以这样读取远程数据
select *
from opendatasource('sqloledb','data source=192.168.1.xxx; user id=sa;password=11111').数据库名.dbo.表名




永生天地 2010-08-02
  • 打赏
  • 举报
回复
/*
环境 :

本地(xp+sql2005):
select @@version

icrosoft SQL Server 2005 - 9.00.1399.06 (Intel X86)
Oct 14 2005 00:33:37
Copyright (c) 1988-2005 Microsoft Corporation
Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)

data服务器(win2000+sql2000):
select @@version

Microsoft SQL Server 2000 - 8.00.2039 (Intel X86)
May 3 2005 23:18:38
Copyright (c) 1988-2003 Microsoft Corporation
Enterprise Edition on Windows NT 5.0 (Build 2195: Service Pack 4)

*/
-- 1 创建链接服务器
exec sp_addlinkedserver 'data', '', 'SQLOLEDB','192.168.102.208'
exec sp_addlinkedsrvlogin 'data','false ',null, 'sa', 'sa'
go
-- 2 创建测试过程
if object_id('p_test') is not null drop proc p_test
go
create proc p_test @sql varchar(8000)
as
begin
exec(@sql)
end
-- 3 测试
declare @sql varchar(8000)
set @sql ='
delete from data.master.dbo.tb
insert data.master.dbo.tb (item) values(''AAAAAAAAAA'')
select * from data.master.dbo.tb'
exec p_test @sql

/*

(1 行受影响)

(1 行受影响)
Item FDate Type quantity unit
---------------------------------------------------------------------------------------------------- ----------------------- ---------------------------------------------------------------------------------------------------- ----------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
AAAAAAAAAA NULL NULL NULL NULL

(1 行受影响)

*/

-- 4 删除链接
exec sp_dropserver 'data ', 'droplogins'
王向飞 2010-08-02
  • 打赏
  • 举报
回复
--访问不同电脑上的数据库(远程只要联好网就一样) 

--如果经常访问或数据量大,建议用链接服务器

--创建链接服务器
exec sp_addlinkedserver 'srv_lnk ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 '
exec sp_addlinkedsrvlogin 'srv_lnk ', 'false ',null, '用户名 ', '密码 '
go

--查询示例
select * from srv_lnk.数据库名.dbo.表名

--导入示例
select * into 表 from srv_lnk.数据库名.dbo.表名

go
--处理完成后删除链接服务器
exec sp_dropserver 'srv_lnk ', 'droplogins '
永生天地 2010-08-02
  • 打赏
  • 举报
回复
下载mdac,重装
[Quote=引用 9 楼 fox1025701 的回复:]
创建链接成功 执行查询的时候出现这样错误

--查询示例
select * from srv_lnk.数据库名.dbo.表名


服务器: 消息 7403,级别 16,状态 1,行 1
未能找到 OLE DB 提供程序 'SQLOLEDB ' 的注册表项。
OLE DB 错误跟踪[Non-interface error: Provider not registered.]。。
……
[/Quote]
fox1025701 2010-08-02
  • 打赏
  • 举报
回复
创建链接成功 执行查询的时候出现这样错误

--查询示例
select * from srv_lnk.数据库名.dbo.表名


服务器: 消息 7403,级别 16,状态 1,行 1
未能找到 OLE DB 提供程序 'SQLOLEDB ' 的注册表项。
OLE DB 错误跟踪[Non-interface error: Provider not registered.]。。
请问问题出在那?
goodhj 2010-08-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 fox1025701 的回复:]
补充一点,请问远程服务器需要开放远程连接设置吗?
[/Quote]

那是明显的,要把你要访问的那个远程数据库的允许远程访问选项打开,默认是关闭的
//设置显示全部高级选项
EXEC sp_configure 'show advanced options', '1' RECONFIGURE
//显示
EXEC sp_configure
//设置允许远程访问
EXEC sp_configure 'remote access', '1' RECONFIGURE
htl258_Tony 2010-08-02
  • 打赏
  • 举报
回复
参考:SQL不同服务器数据库之间的数据操作整理(完整版)http://blog.csdn.net/htl258/archive/2010/06/26/5695391.aspx
claro 2010-08-02
  • 打赏
  • 举报
回复
通常不是出现这样的错误,除非目的服务器开启防火墙屏蔽数据库端口。
fox1025701 2010-08-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xys_777 的回复:]
SQL code
/*
环境 :

本地(xp+sql2005):
select @@version

icrosoft SQL Server 2005 - 9.00.1399.06 (Intel X86)
Oct 14 2005 00:33:37
Copyright (c) 1988-2005 Microsoft Corporation
Devel……
[/Quote]

--查询示例
select * from srv_lnk.数据库名.dbo.表
用这种方法查询时提示SQL SERVER 被拒或无法访问呢?
fox1025701 2010-08-02
  • 打赏
  • 举报
回复
补充一点,请问远程服务器需要开放远程连接设置吗?

22,210

社区成员

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

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