`
44289533
  • 浏览: 64823 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Sqlserver跨库访问

阅读更多

用openrowset连接远程SQL或插入数据  有2种方法:
  方法一:只是临时访问,可以直接用openrowset
  例子
  1.创建实例
  exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',1
reconfigure
  2.查询示例
  select * from openrowset('SQLOLEDB', 'sql服务器名'; '用户名'; '密码', 数据库名.dbo.表名)
  --导入示例
  select * into 表 from openrowset('SQLOLEDB' ,'sql服务器名';'用户名';'密码' ,数据库名.dbo.表名)
  方法二:创建链接服务器link server
  1.创建连接服务
  exec sp_addlinkedserver   'srv_lnk', '', 'SQLOLEDB','远程服务器名或ip地址'
  exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用户名','密码'
  2.查询示例
  select * from srv_lnk.数据库名.dbo.表名
  --导入示例
  select * into 表 from srv_lnk.数据库名.dbo.表名
  --以后不再使用时删除链接服务器
  exec sp_dropserver 'srv_lnk','droplogins'
  
  
  --下面的示例访问来自某个表的数据,该表在 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表的数据
  备注:
  1、关于链接服务器的详细情况请参阅联机丛书中的sp_addlinkedserver、 sp_addlinkedsrvlogin、sp_addserver、sp_dropserver、sp_serveroption、sp_linkedservers等系统级存储过程。
  2、关于此链接服务器的创建及其使用在不同环境下(全部内网服务器、一内网一公网服务器、全公网服务器)测试,均告通过。
  3、有时候在存储过程中访问链接服务器的时候可能会碰到如下的提示,必须要对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)
  --1、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
  --3、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

 

分享到:
评论

相关推荐

    连接mysql sqlserver的两个数据库

    连接mysql sqlserver的两个数据库

    SQLserver连接问题解决办法

    SQLserver2000〔Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server不存在或访问被拒绝 分类: Technology2007-04-20 19:076126人阅读评论(1)收藏举报 SQLserver2000,打开服务管理器时出现错误:〔Microsoft]...

    SQL Server实现跨库跨服务器访问的方法

    主要给大家介绍了关于SQL Server实现跨库跨服务器访问的方法,文中通过示例代码介绍的非常详细,对大家学习或者使用SQL Server具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    Microsoft SQL Server 2005 Express Edition SP3

    未及时包括在本自述文件中的任何有关 SQL Server 2005 和 SQL Server Express 的信息都将发布到 Microsoft 知识库文章 907284 中。 [顶部] 3.0 安装问题 本部分详细介绍此版本中的安装问题。 3.1 现有的 SQL ...

    SQL Server 2008管理员必备指南(超高清PDF)Part3

    4.1 访问SQL Server的配置数据 4.1.1 使用系统目录和目录视图 4.1.2 使用系统存储过程 4.2 管理SQL Server配置选项的技巧 4.2.1 设置配置选项 4.2.2 使用SET选项 4.2.3 使用服务器选项 4.2.4 使用数据库选项 4.2.5 ...

    SQL Server 2008管理员必备指南(超高清PDF)Part1

    4.1 访问SQL Server的配置数据 4.1.1 使用系统目录和目录视图 4.1.2 使用系统存储过程 4.2 管理SQL Server配置选项的技巧 4.2.1 设置配置选项 4.2.2 使用SET选项 4.2.3 使用服务器选项 4.2.4 使用数据库选项 4.2.5 ...

    SQL Server 2008管理员必备指南(超高清PDF)Part2

    4.1 访问SQL Server的配置数据 4.1.1 使用系统目录和目录视图 4.1.2 使用系统存储过程 4.2 管理SQL Server配置选项的技巧 4.2.1 设置配置选项 4.2.2 使用SET选项 4.2.3 使用服务器选项 4.2.4 使用数据库选项 4.2.5 ...

    oracle连接sqlserver

    oracle通过安装透明网关访问sqlserver数据库,透明网关要与数据库的版本保持一致,附件中包含了透明网关及数据库的配置文件及经过整理测试的文档。亲测好用,但是由于不同的环境导致无法访问的 请检查防火墙及安全...

    SqlServer链接服务器到PosgreSQL.docx

    SqlServer链接服务器到PosgreSQL:通过本地服务器增加ODBC数据源,实现数据库级跨库访问

    .Net Core2.1 使用SqlSugar对SqlServer数据库操作

    .Net Core2.1三层架构,使用SqlSugar对SqlServer数据进行数据交互,实现增、删、改、查

    SQL.Server.2008管理员必备指南.part2.rar(2/4)

     4.1 访问SQL Server的配置数据 69  4.1.1 使用系统目录和目录视图 70  4.1.2 使用系统存储过程 75  4.2 管理SQL Server配置选项的技巧 82  4.2.1 设置配置选项 82  4.2.2 使用SET选项 83  4.2.3 使用服务器...

    SQL.Server.2008管理员必备指南.part1.rar(1/4)

     4.1 访问SQL Server的配置数据 69  4.1.1 使用系统目录和目录视图 70  4.1.2 使用系统存储过程 75  4.2 管理SQL Server配置选项的技巧 82  4.2.1 设置配置选项 82  4.2.2 使用SET选项 83  4.2.3 使用服务器...

    SQL.Server.2008管理员必备指南.part4.rar(4/4)

     4.1 访问SQL Server的配置数据 69  4.1.1 使用系统目录和目录视图 70  4.1.2 使用系统存储过程 75  4.2 管理SQL Server配置选项的技巧 82  4.2.1 设置配置选项 82  4.2.2 使用SET选项 83  4.2.3 使用服务器...

    SQL.Server.2008管理员必备指南.part3.rar(3/4)

     4.1 访问SQL Server的配置数据 69  4.1.1 使用系统目录和目录视图 70  4.1.2 使用系统存储过程 75  4.2 管理SQL Server配置选项的技巧 82  4.2.1 设置配置选项 82  4.2.2 使用SET选项 83  4.2.3 使用服务器...

    MSSQl分布式查询

    MSSQlServer所谓的分布式查询(DistributedQuery)是能够访问存放在同一部计算机或不同计算机上的SQLServer或不同种类的数据源,从概念上来说分布式查询与普通查询区别它需要连接多个MSSQL服务器也就是具有多了数据源....

    经典SQL语句大全

    在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据 在selecte统计函数中的字段,不能和普通的字段放在一起; 13、对数据库进行操作: 分离数据库: sp_detach_db; 附加数据库:sp_attach_db 后...

    SQL Server实时同步更新远程数据库遇到的问题小结

    工作中遇到这样的情况,需要在更新表TableA(位于服务器ServerA 172.16.8.100中的库DatabaseA)同时更新TableB(位于服务器ServerB 172.16.8.101中的库DatabaseB)。 TableA与TableB结构相同,但数据数量不一定相同...

    java程序是怎么操作数据库的,可以以常用据库为例,求详细解答,最好能举例。

    (2)java访问sqlserver服务器 第一步:安装jdbc 点击SQL Server for JDBC驱动程序安装程序setup.exe(可以到微软网站下载 http://msdn.microsoft.com/library/default.asp?rul=/downloads/list/sqlserver.asp下载)...

    libzdb-3.2.2.zip

    跨平台数据库访问连接池。基于最新版libzdb编译,编译工具是VS2019。自带Sqlite、Mysql和SqlServer库,Postgresql和Oracle未测试。

Global site tag (gtag.js) - Google Analytics