分布式查询 四部分构成的名字、OpenDataSource()、 OpenQuery()、 OpenRowSet()

本地分布式查询:
1 使用由四部分构成的名字 服务器名 数据库名 用户名 对象名(表,视图)
2 使用OpenDataSource()函数
OpenDataSource(provider_name,init_string)
initstring 是一个分号分割的字符串,它包括好多参数:数据源,位置,扩展属性,连接超时,用户ID,口令,目录等
如果使用OpenDataSource()连接到另一个运行在windows上的Sqlserver实例需要Kerberos安全委托
实例:select aa,bb from OpenDataSource(’SQLOLEDB’,’DATASOURCE=255.255.255.255;USER ID=JOE; PASSWORD=J’).database.dbo.table
 
访问 access时,由于access中只有一个数据库,而且表也没有所有者的德概念,所有四部分中可省略数据库和所有者
select aa,bb from
OpenDataSource(‘Microsoft.Jet.OLEDB.4.0’,’Data Source=C:/chai_customers.mdb’)…customers      customers为表名
 
访问 EXCEL时,这个分布式的SQLSERVER查询将使用OLE DB调用Jet引擎来打开EXCEL表格,OpenDataSource()函数仅仅提供了由四个部分中的服务器名部分,与Access中一样,可以省略数据库名和所有者名
Update OpenDataSource’Microsoft.Jet.OLEDB.4.0’,’Data Source=C:/chai_schules.xls; User ID=Admin; password=;Extended properties=Excel 5.0’… tour
set [base camp]=’aaa’ where ID=’2’     tour是以前定义的一个命名范围,[base camp] ID是字段名
 
直接传递分布式查询是查询在外部数据源上查询,并把结果返回给SQLServer,减少服务器(外部数据源)和客户(SqlServer)的通信量,
但是直接传递查询需要使用外部数据源的查询方法。
如果要使用直接传递查询修改数据,那么远程数据源的类型将决定修改是在本地还是在远程发生:
1、 如果是对另一个SqlServer的数据修改,修改是在远程的SQLServer上执行。
2、 如果是对非SqlServer源的数据进行修改相应的数据提供程序将决定在何处进行修改,在大多数情况下直接传递查询只会从远程读取数据,并将选取的数据返回给SqlServer,在SqlServer中进行修改,然后把修改结果返回给数据源。
 
在四种分布式查询中, 使用四个部分构成的的名字和OpenQuery()函数是其中最好的两种方法,它们都可以使用预定义的链接,如果两种方法的效果差不多时,建议使用四个部分构成的的名字,因为它支持Sql Server自动优化分布式查询。
 
OpenQuery()函数在SQL DML中相当于一个表,两个参数:链接服务器的名字和直接传递查询,
select 实例:select * from OpenQuery(chai_schedule,’select * from tour where ID=”2”’) chai_schedule为命名范围,ID 为字段名,chai_schedule是链接服务器。
update实例:OpenQuery()通过JET引擎只返回需要修改的数据,实际上的修改在本定Sql Server上执行,操作的结果写回到外部数据源
update OpenQuerychai_schedule,’select * from tour where ID=”2”’set [base camp]=’aaa’ where ID=’2’   chai_schedule链接服务器tour是以前定义的一个命名范围,[base camp] ID是字段名
 
OpenRowSet()函数是直接传递查询的OpenDataSource函数,不同的是OpenRowSet函数多了一个指定直接传递查询的参数。
select * from OpenRowSet (‘Microsoft.Jet.OLEDB.4.0’,’ C:/chai_customers.mdb’;’Admin’;’’,’select * from Customers where ID=1’)
 
使用OpenRowSet函数执行update命令时,应将函数作为要修改的表,update命令中where字句将由OpenRowSet函数按直接传递方式处理。
update OpenRowSet(‘Microsoft.Jet.OLEDB.4.0’,’ C:/chai_customers.mdb’;’Admin’;’’,’select * from Customers where ID=1’) set conn=‘www’
Customers为表名 ID 及conn为字段名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值