Sql Server 跨服务器链接

用openrowset链接远程SQL或插入数据sql

--若是只是临时访问,能够直接用openrowset数据库

--查询示例编程

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

--导入示例安全

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

--建立连接服务器网络

exec sp_addlinkedserver   'srv_lnk', '', 'SQLOLEDB','远程服务器名或ip地址'oracle

exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用户名','密码'分布式

go测试

--查询示例

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

--导入示例

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

--之后再也不使用时删除连接服务器

exec sp_dropserver 'srv_lnk','droplogins'

go

--下面的示例访问来自某个表的数据,该表在 SQL Server 的另外一个实例中。

SELECT *FROM OPENDATASOURCE('SQLOLEDB','Data Source=ServerName;User ID=MyUID;Password=MyPass').Northwind.dbo.Categories

下面是个查询的示例,它经过用于 Jet 的 OLE DB 提供程序查询 Excel 电子表格。

SELECT *FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="c:Financeaccount.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions

因为项目须要,在开发过程赶上跨数据库服务器访问数据的问题.

在网络上一搜,资料确实很多,不过解决本身的问题也花了大半天的时候,在这里花些时间总结一下.

1.确立问题

因为须要进行跨数据库服务器的查询操做,因此我我的把其定位于分布式查询数据的问题.

2.解决方案

第一个概念.连接服务器.

连接服务器通常用来处理分布式查询。当客户端应用程序经过连接服务器执行分布式查询时,SQL Server 将分析该命令,并向 OLE DB 发送行集请求。行集请求的形式能够是对提供程序执行查询或从提供程序打开基表。

分布式查询能够访问来自多种异类数据源的数据,而这些数据可存储在相同或不一样的计算机上。Microsoft® SQL Server? 2000 经过使用 OLE DB(Microsoft 通用数据访问应用程序接口 (API) 规范)支持分布式查询。

连接服务器配置容许 Microsoft® SQL Server? 对其它服务器上的 OLE DB 数据源执行命令。连接服务器具备如下优势:

远程服务器访问。

对整个企业内的异类数据源执行分布式查询、更新、命令和事务的能力。

可以以类似的方式肯定不一样的数据源。

连接服务器组件

连接服务器的定义指定了 OLE DB 提供程序和 OLE DB 数据源。

OLE DB 提供程序是管理特定数据源和与特定数据源进行交互的动态连接库 (DLL)。OLE DB 数据源标识可经过 OLE DB 访问的特定数据库。尽管经过连接服务器的定义所查询的数据源一般是数据库,但也存在适用于多种文件和文件格式的 OLE DB 提供程序,包括文本文件、电子表格数据和全文内容检索结果。下表说明了最经常使用于 SQL Server 的 OLE DB 提供程序和数据源示例。

OLE DB提供程序                                 OLE DB 数据源

用于 SQL Server 的 Microsoft OLE DB 提供程序     SQL Server 实例

用于 Jet 的 Microsoft OLE DB 提供程序             mdb 数据库文件的路径名

用于 ODBC 的 Microsoft OLE DB 提供程序           指向某个具体数据库的 ODBC 数据源名称

用于 oracle 的 Microsoft OLE DB 提供程序         指向 oracle 数据库的 SQL*Net 别名

用于索引服务的 Microsoft OLE DB 提供程序         可以对其执行属性搜索或全文检索的内容文件

说明   SQL Server 只针对分别用于 SQL Server、Jet、Oracle、索引服务和 ODBC 的 Microsoft OLE DB 提供程序进行了测试。然而,SQL Server 分布式查询旨在与任何实现了必需的 OLE DB 接口的 OLE DB 提供程序一块儿使用。

为了使数据源可以经过连接服务器返回数据,那个数据源的 OLE DB 提供程序 (DLL) 必须位于 SQL Server 所在的服务器上。

连接服务器通常用来处理分布式查询。当客户端应用程序经过连接服务器执行分布式查询时,SQL Server 将分析该命令,并向 OLE DB 发送行集请求。行集请求的形式能够是对提供程序执行查询或从提供程序打开基表。

管理连接服务器的定义

设置连接服务器时,请注册 SQL Server 的链接信息和数据源信息。完成注册后,该数据源总能够用单个逻辑名称(即实例名)引用。

可使用存储过程或 SQL Server 企业管理器来建立或删除连接服务器的定义。

使用存储过程:

使用 sp_addlinkedserver 建立连接服务器的定义。若要查看有关给定的 SQL Server 实例中定义的连接服务器的信息,请使用 sp_linkedservers。有关更多信息,请参见 sp_addlinkedserver 和 sp_linkedservers。

使用 sp_dropserver 删除连接服务器的定义。还可使用此存储过程删除远程服务器。

使用 SQL Server 企业管理器:

使用 SQL Server 企业管理器控制台树和"连接服务器"节点(在"安全性"文件夹内)来建立连接服务器的定义。为连接服务器定义名称、提供程序属性、服务器选项和安全选项。有关各类为不一样的 OLE DB 数据源设置连接服务器的方式以及要使用的参数值的更多信息,请参见 sp_addlinkedserver。

经过右击连接服务器并单击"属性"命令,可编辑连接服务器的定义。

经过右击连接服务器并单击"删除"命令,可删除连接服务器的定义。

当对连接服务器执行分布式查询时,请对每一个要查询的数据源指定彻底合法的、由四部分组成的表名。这个由四部分组成的名称的格式应是:linked_server_name.catalog.schema.object_name。

   众所周知,在大型的数据库系统设计中,为了提高效率,不可避免的要将不用的业务放在不一样的数据实例上,所以咱们使用到了连接服务器,连接服务器为你们在不一样的服务之间进行分布式数据操做提供了便利。本例子基于windows 2003操做系统,Sql server 2000(sp4)数据库。

首先要打开你本地服务器和远程服务器的MSDTC:

开始-->Microsoft SQL Server-->服务管理器-->选择服务中的 Distributed Transaction Coordinator(此即DTC),点击“启动”按钮,启动MSDTC.

打开之后,在本地服务器上注册远程服务器的信息,建立linkedServer,操做代码以下:

exec   sp_addlinkedserver     'Far_MDB','','SQLOLEDB','YOIIO005','','','MDB'

而后使用sp_linkedservers,查看此服务器是否已经成功注册为连接服务器,若是已经注册成功,则使用

sp_addlinkedsrvlogin   'Far_MDB','false',null,'sa','****',注册login账号,而后你就能够执行一个Sql语句,试试看看是否能够从连接服务器中操做数据了,

例如:

SELECT *

FROM OPENQUERY(Far_MDB, 'SELECT * FROM MDB_Member')

这就是从个人连接服务器当中去查询MDB_Member表的数据

备注:

一、关于连接服务器的详细状况请参阅联机丛书中的sp_addlinkedserver、 sp_addlinkedsrvlogin、sp_addserver、sp_dropserver、sp_serveroption、sp_linkedservers等系统级存储过程。

二、关于此连接服务器的建立及其使用在不一样环境下(所有内网服务器、一内网一公网服务器、全公网服务器)测试,均告经过。

三、有时候在存储过程当中访问连接服务器的时候可能会碰到以下的提示,必需要对ANSI warning 和ANSI nulls进行设置,这时候按照以下的方法进行设置:

设置本地数据库的属性-->链接-->选上ANSI warning 和 ANSI nulls

如何访问SQL Server数据库

不管是从桌面Windows电脑上仍是在Pocket PC设备上访问SQL Server数据库,首先都须要创建数据库链接。使用Visual Studio 2005开发桌面Windows应用时,开发人员能够从服务器资源管理器中拖拉数据表到窗体上,可是.NET Compact Framework不支持数据设计器。这意味着开发人员须要编程实现创建数据库链接。.NET Compact Framework的System.Data.SqlClient命名空间一样不支持跨服务器的事务和链接池。设计移动应用解决方案时,应该将数据库事务限制发生在服务器上的单独数据库中。

由于.NET Compact Framework的System.Data.SqlClient命名空间不支持数据库链接池,因此在Pocket PC设备上创建SQL Server数据库链接时会产生必定的延时。在桌面Windows编程中,要求尽量缩短保持与数据库链接的时间以及减小数据库链接次数。而在开发Pocket PC上的数据库应用程序时,最佳策略是提早建立数据库链接,并尽可能在整个应用程序生命周期内保持数据库链接来减小链接次数。

下面经过设计开发一个用途普遍的Pocket PC数据库应用程序,介绍如何访问服务器端数据。这个Pocket PC应用程序须要引用System.Data.Common、System.Xml和System.Data.SqlClient命名空间。

如何用sql语句进行跨库查询

在机器B上的数据库database2中建立一个临时表#tmp,

内容就是机器A上的数据库database1里面的Table1。

如何用sql语句完成?(不借用dts等)

SQL code --建立连接服务器

exec sp_addlinkedserver   'ITSV','','SQLOLEDB','远程服务器名或ip地址'

exec sp_addlinkedsrvlogin 'ITSV','false',null,'用户名','密码'

--查询示例

select * from ITSV.数据库名.dbo.表名

--导入示例

select * into 表 from ITSV.数据库名.dbo.表名

--之后再也不使用时删除连接服务器

exec sp_dropserver 'ITSV','droplogins'

--链接远程/局域网数据(openrowset/openquery/opendatasource)

--一、openrowset

--查询示例

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

--生成本地表

select * into 表 from 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 a

inner join 本地表 b on a.列A=b.列A

--三、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.表名

select * from 本地表

用 连接服务器

OPENROWSET

OPENDATASOURCE

均可以

连接服务器.database1.dbo.table1

连接服务器.database1.dbo.table1

SQL code

select * into #

from openrowset('sqloledb','ip';'sa';'','select * from pubs.dbo.jobs')

若是只是偶尔使用 就用opendatasource/openrowset 固定的频繁使用建linked server

相关文章
相关标签/搜索