在sql server2005下访问oralce数据库以及访问另一台sql server

在sql server2005---->服务器对象  创建链接服务器  或者是

exec sp_addlinkedserver '连接服务器名称', '用户名', '密码', 'oracle服务名'

EXEC SP_ADDLINKEDSERVER @server = 'ORCL', @srvproduct ='Oracle',@provider = 'MSDAORA',@datasrc = 'ORCL' --DataSrc 本地服务名
EXEC SP_ADDLINKEDSRVLOGIN 'ORCL', false, null, 'KSDM', 'KSDM'

 

在sql server2005---->创建服务器对象

exec sp_addlinkedserver 'srv_lnk','','sqloledb','192.168.3.3'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用户名','密码'

select   *   from   srv_lnk.数据库.dbo.表名!

创建完成后执行语句

例如 select * from OPenQuery( 连接服务器名称,'select * from  oralce用户名.表名')

 

INSERT 示例

INSERT OPENQUERY (linked_server, 'SELECT title, content FROM msgs')
VALUES ('title', 'content');

 

UPDATE 示例

UPDATE OPENQUERY (linked_server, 'SELECT title, content FROM msgs WHERE id=1')
SET title = 'newTitle', content = 'newContent';

DELETE 示例

DELETE OPENQUERY (linked_server, 'SELECT id FROM msgs WHERE id=1');

OPENQUERY 不接受参数变量,也就是说:DELETE OPENQUERY (linked_server, 'SELECT id FROM msgs WHERE id=' + @id); 是不正确的,但可以这样做:DELETE OPENQUERY (linked_server, 'SELECT id FROM msgs') WHERE id=@id); 。

T-SQL 中,INSERT 可以省略 INTO,DELETE 也可以省略 FROM。

INSERT 时必须明确 SELECT 的字段。

 

 

 

 


 


OPENQUERY ( linked_server ,'query' )
linked_server

表示链接服务器名称的标识符。

' query '

在链接服务器中执行的查询字符串。该字符串的最大长度为 8 KB。

 

OPENQUERY 不接受其参数的变量。

OPENQUERY 不能用于对链接服务器执行扩展存储过程。但是,通过使用四部分名称,可以在链接服务器上执行扩展存储过程。例如:

 
EXEC SeattleSales.master.dbo.xp_msver

 

任何用户都可以执行 OPENQUERY。用于连接到远程服务器的权限是从为链接服务器定义的设置中获取的

我在创建链接后,使用OPENQUERY,出现错误:链接服务器的 OLE DB 访问接口 "MSDAORA" 返回了消息 "发生了一个 Oracle 错误,但无法从 Oracle 中检索错误信息。

后来更换驱动:Oracle Provider for OLE DB,解决了这个错误

 

 

 

不同服务器数据库之间的数据操作

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

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

--导入示例
select * intofrom ITSV.数据库名.dbo.表名

--以后不再使用时删除链接服务器
exec sp_dropserver  'ITSV ', 'droplogins '

--连接远程/局域网数据(openrowset/openquery/opendatasource)
--
1、openrowset

--查询示例
select * from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)

--生成本地表
select * intofrom openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)

--把本地表导入远程表
insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)
select *from 本地表

--更新本地表
update b
set b.列A=a.列A
from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地表 b
on a.column1=b.column1

--openquery用法需要创建一个连接

--首先创建一个连接创建链接服务器
exec sp_addlinkedserver   'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 '
--查询
select *
FROM openquery(ITSV,  'SELECT *  FROM 数据库.dbo.表名 ')
--把本地表导入远程表
insert openquery(ITSV,  'SELECT *  FROM 数据库.dbo.表名 ')
select * from 本地表
--更新本地表
update b
set b.列B=a.列B
FROM openquery(ITSV,  'SELECT * FROM 数据库.dbo.表名 ') as
inner join 本地表 b on a.列A=b.列A

--3、opendatasource/openrowset
SELECT   *
FROM   opendatasource( 'SQLOLEDB ''Data Source=ip/ServerName;User ID=登陆名;Password=密码 ' ).test.dbo.roy_ta
--把本地表导入远程表
insert opendatasource( 'SQLOLEDB ''Data Source=ip/ServerName;User ID=登陆名;Password=密码 ').数据库.dbo.表名

 

posted @ 2010-08-02 12:45  居后不争  阅读(348)  评论(0编辑  收藏  举报