网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > SQL技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.一个有关SQL Server连接的问题.
.实现一个用户取过的数据不被其他.
.MS SQL Server存储过程参数的隐式.
.远程SQL SERVER服务器备份数据到.
.高级复制中mlog$表的HWM过高导致.
.更改数据库中表的所属用户的两个.
.教你如何在SQL Server数据库中加.
.自定义用于ASP Web站点的SQL 7.0.
.DBA创建用户帐户及分配特定特权的.
.页面中标题替换方法,在SQL中取数.
.SQLServer中需要避免的查询设计错.
.在SQL中设置允许同时连接的用户数.
.使用VS 2005和SQL Server 2005创.
.SQL Server性能分析参数 .
.在Informix数据库中释放异常的锁.
.开启sql server 2005的远程访问功.
.经常用到的交叉表问题,一般用动态.
.SQL Server 2005 Express混合模式.
.sql语句格式化数字(前面补0)的参.
.SQL Server导入excel数据之Bug!.

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

发表日期:2007-3-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',''

上一篇:SQL Server 性能调优 人气:3819
下一篇:存储过程与SQL语句的恩怨情仇 人气:4435
浏览全部MSSQL跨服务器连接的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐