分享
 
 
 

MSSQL跨服务器连接的几种方法

王朝mssql·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

下面对 MSSQL 跨服务器连接的方式总结一下:

1 OPENDATASOURCE

在SQL文中直接用此语句打开数据库,示例

OPENDATASOURCE(

'SQLOLEDB',

'Data Source=TQDBSV001;User ID=fish;Password=2312').RackDB.dbo.CS

很简单,但是速度很慢。

2 OPENROWSET

不想打字了,网上粘得,我试验过可以用,但我没有用,致使多一种方法而已。我不知道他有什么特别的用途!

包括从 OLE DB 资料来源存取远端资料需要的所有连线资讯。这个方法是在连结伺服器存取资料表的替代方法,而且是使用 OLE DB 连线与存取远端资料的一次、特定的方法。OPENROWSET 函数可以在查询的 FROM 子句中当作资料表名称来参考。根据 OLE DB Provider 的能力,OPENROWSET 函数也可以当作 Insert、Update 或 Delete 陈述式的目标资料表来参考。虽然查询可能会传回多个结果集,OPENROWSET 只传回第一个结果集。

语法

OPENROWSET ( 'provider_name'

, { 'datasource' ; 'user_id' ; 'password'

| 'provider_string' }

, { [ catalog.] [ schema.] object

| 'query' }

)

引数

'provider_name'

代表登录中指定的 OLE DB Provider 的亲和名称之字元字串。provider_name 没有预设值。

'datasource'

是对应到特殊 OLE DB 资料来源的字串常数。datasource 是要传送到提供者 IDBProperties 介面以初始化提供者的 DBPROP_INIT_DATASOURCE 属性。一般而言,此字串包括资料库档案名称、资料库伺服器名称或提供者了解并用以寻找资料库的名称。

'user_id'

是要传送到指定的 OLE DB Provider 的使用者名称字串常数。user_id 指定连线的安全性内容且以 DBPROP_AUTH_USERID 属性传送以初始化提供者。

'password'

是要传送到 OLE DB Provider 的使用者密码字串常数。初始化提供者时,password 以 DBPROP_AUTH_PASSWORD 属性传送。

'provider_string'

是以 DBPROP_INIT_PROVIDERSTRING 属性传送以初始化 OLE DB Provider 的特定提供者连线字串。provider_string 一般会包含所有初始化提供者时需要的所有连线资讯。

catalog

是有指定物件的资料库目录或资料库名称。

schema

是指定物件的结构描述或物件拥有者名称。

object

唯一指定要操作的物件之物件名称。

'query'

传送到提供者并由提供者执行的字串常数。MicrosoftR SQL Server? 不处理此查询,但处理由提供者传回的查询结果 (传递查询)。传递查询用在不经由资料表名称而只经由命令语言显露其表格资料的提供者时,非常有用。只要查询提供者支援 OLE DB Command 物件及其强制介面,远端伺服器就支援传递查询。如需详细资讯,请参阅 SQL Server OLE DB Programmer's Reference。

备注

如果 OLE DB Provider 支援指定的资料来源中的多个目录与结构描述,就需要资料库目录与结构描述名称。如果 OLE DB Provider 不支援,可以省略 catalog 与 schema 的值。

如果提供者只支援结构描述名称,必须指定 schema.object 格式之两个部份的名称。如果提供者只支援资料库目录名称,必须指定 catalog.schema.object 格式之三个部份的名称。

OPENROWSET 不接受变数作为其引数。

权限

OPENROWSET 权限由传送到 OLE DB Provider 的使用者名称的权限来决定。

范例

A. 使用有 Select 的OPENROWSET 与 Microsoft OLE DB Provider for SQL Server

以下范例使用 Microsoft OLE DB Provider for SQL Server,以存取命名为 seattle1 的远端伺服器上 pubs 资料库的 authors 资料表。从 datasource、user_id 与 password 初始化提供者,且使用 Select 来定义传回的资料列集。

格式:

Select a.*

FROM OPENROWSET('SQLOLEDB’,'ServerName';'LoginUser';'Password',

'Select * FROM [DatabaseName].dbo.TableName orDER BY ColName1, ColName12') AS a

说明:查询所提供的驱动程序(SQLOLEDB是查询SQL Server),查询SQL服务器ServerName下的Databasename中的数据TableName表中的数据(SQL语句),其实用户权限是LoginUser。

例子:

USE pubs

GO

Select a.*

FROM OPENROWSET('SQLOLEDB','seattle1';'sa';'MyPass',

'Select * FROM pubs.dbo.authors orDER BY au_lname, au_fname') AS a

GO

B. 使用有物件的 OPENROWSET 与 OLE DB Provider for ODBC

以下范例使用 OLE DB Provider for ODBC 与 SQL Server ODBC 驱动程式,来存取命名为 seattle1 的远端伺服器上 pubs 资料库的 authors 资料表。以 ODBC 提供者使用的 ODBC 语法指定之 provider_string 来初始化提供者,并使用 catalog.schema.object 语法来定义传回的资料列集。

格式:这连接方式是ODBC数据的驱动程序

Select a.*

FROM OPENROWSET('MSDASQL',

'DRIVER={SQL Server};SERVER=ServerName;UID=LoginUser;PWD=Password,

[DatabaseName].dbo.TableName) AS a

orDER BY ColName1, ColName12

USE pubs

GO

Select a.*

FROM OPENROWSET('MSDASQL',

'DRIVER={SQL Server};SERVER=seattle1;UID=sa;PWD=MyPass',

pubs.dbo.authors) AS a

orDER BY a.au_lname, a.au_fname

GO

C. 使用 Microsoft OLE DB Provider for Jet

以下范例藉由Microsoft OLE DB Provider for Jet 存取 Microsoft Access Northwind 资料库中的 orders 资料表。

1.附注 以下范例假设已经安装 Access。

1、

USE pubs

GO

Select a.*

FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',

'c:\MSOffice\Access\Samplesorthwind.mdb';'admin';'mypwd', orders)

AS a

GO

2、

select * from openrowset('Microsoft.Jet.OLEDB.4.0',

'E:\Study\Access\test.mdb';'admin';'','select * from student')

Select a.*

FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0',

'E:\Study\Access\test.mdb';'admin';'', student)

AS a

2.是以Excel为例,必须安装了Excel

select *

from

OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 5.0;HDR=YES;DATABASE=G:\WorkEveryDay\DayDo\OrderList',OrderList$)

DATABASE=G:\WorkEveryDay\DayDo\OrderList'是Excel的表名及路径

,OrderList$是工作区的名字MICROSOFT.JET.OLEDB.4.0是Excel的驱动程序,也可以用MICROSOFT.JET.OLEDB.5.0,MICROSOFT.JET.OLEDB.8.0,我测试所用的window 2003及SQL Server 2000其中OrderList$所面的$不能少,要不能报错,$是代表是工作区3.以VFP(DBF文件名)

select * from openrowset('MSDASQL','Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=D:\','select * from [temp.DBF]')

说明:SourceType是数据源类型,SourceDB是数据源,后面是操作DBF的SQL查询语句。

D. 使用 OPENROWSET 与 INNER JOIN 中的其他资料表

以下范例选取储存在相同电脑上 SQL Server Northwind 资料库的 customers 资料表的所有资料,以及 Access Northwind 资料库的 orders 资料表的所有资料。

附注 以下范例假设已经安装 Access。

USE pubs

GO

Select c.*, o.*

FROM Northwind.dbo.Customers AS c INNER JOIN

OPENROWSET('Microsoft.Jet.OLEDB.4.0',

'c:\MSOffice\Access\Samplesorthwind.mdb';'admin';'mypwd', orders)

AS o

ON c.CustomerID = o.CustomerID

GO

E.将存储过程的记录集插入到虚拟表中(执行的存储不策有全局虚拟表)

如:

Select * into #t

FROM OPENQUERY([192.168.42.43], 'exec [Order].dbo.Or_Select_BackListDetail ''BK0607190001''')

如下:就会报错,必须先建表create table #t,而且此虚拟表的参数一定要与存储过程的参数一样。

Insert into #t

exec [Order].dbo.Or_Select_BackListDetail 'BK0607190001'

F:将打开的相应的文件(dbf,exec等等),从SQL里插入数据进行

insert into

--select * from

openrowset('MSDASQL', 'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=d:\',

'select * from temp.DBF')

select top 100 orderno,shipto from ordermaster

注:

1、两数字段结构一样(长度、类型)

2、保证导出表没有为null或空的字段

3、将你上面的语句改为下面的select * from tmp.DBF,就是不要那个[]

3 建立链接服务器

if exists (select 1 from master..sysservers where srvname = 'ls_Source')

exec sp_dropserver 'ls_Source','droplogins'

go

exec sp_addlinkedserver

'ls_Source', 'ms','SQLOLEDB','TAODBSV001'

go

EXEC sp_addlinkedsrvlogin

'ls_Source','false','sa','read',''

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有