也想快乐的生活

好好扮演自己的角色,做自己该做的事

分布式查询 四部分构成的名字、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为字段名
阅读更多
个人分类: SQL基础
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭