`
starbhhc
  • 浏览: 663548 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

SQL Server 跨服务器连接的多种方法

阅读更多
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 Programmers 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 资料表。

a、以下范例假设已经安装 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


b、以Excel为例,必须安装了Excel。

select *
from
OPENROWSET(MICROSOFT.JET.OLEDB.4.0,Excel5.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跨服务器连接的多种方法

    ### SQL Server跨服务器连接的多种方法 #### 一、引言 在企业级应用中,经常需要在不同的SQL Server实例之间进行数据交换或共享。为了实现这一目标,SQL Server提供了几种跨服务器连接的方法,每种方法都有其特点和...

    SQLServer跨服务器连接的多种方法[整理].pdf

    SQL Server 跨服务器连接的多种方法 SQL Server 跨服务器连接是指在不同的服务器之间进行数据交换和操作的过程。这种连接可以实现跨服务器的数据共享、数据同步和数据备份等功能。在 SQL Server 中,存在多种方法来...

    SQLSERVER创建连接服务器

    ### SQLSERVER创建连接服务器 #### 知识点一:连接服务器的概念 在SQL Server中,连接服务器(Linked Server)是一种使一个SQL Server实例能够访问另一个SQL Server实例或非SQL Server数据源的技术。通过连接...

    SQL Server 2012链接服务器到PostgreSQL

    在SQL Server 2012中,连接到外部数据源如PostgreSQL数据库是通过设置链接服务器来实现的。链接服务器允许SQL Server查询和操作非本地的数据,提供了与异构数据库系统交互的能力。以下是一个详细步骤,说明如何在SQL...

    sql server客户端连接工具

    SQL Server客户端连接工具是数据库管理员和开发人员用来与Microsoft SQL Server进行交互的重要工具。它提供了图形用户界面(GUI)和命令行选项,使得用户能够轻松地执行查询、管理数据库对象以及进行其他数据库维护...

    SQL SERVER连接oracle数据库几种方法

    我们可以使用多种方法来连接 Oracle 数据库,包括使用 OPENDATASOURCE、链接服务器、OPENQUERY 和 ODBC 等。同时,我们也需要注意解决 Ad Hoc Distributed Queries 访问限制,以便实现数据交换和集成。

    sqlserver连接字符串大全

    本文将基于“SQL Server连接字符串大全”的主题,详细介绍不同版本的SQL Server(如2000、2005等)及其不同环境下的连接字符串配置方法。 #### 一、SQL Server 2000连接字符串 对于SQL Server 2000版本,连接字符串...

    sql server连接数据库 ado连接sql server

    ### SQL Server 数据库连接与ADO应用详解 #### 一、引言 在现代软件开发过程中,数据处理是一项至关重要的任务。Microsoft SQL Server作为一款广泛使用的数据库管理系统,在企业级应用中扮演着重要角色。ADO...

    SqlServer数据库远程连接案例教程.doc

    Sql Server 提供了多种身份验证模式,包括 Windows 身份验证和 Sql Server 身份验证。 Windows 身份验证使用 Windows 操作系统的身份验证机制,而 Sql Server 身份验证使用 Sql Server 自己的身份验证机制。 二、 ...

    pb连接sqlserver所需dll全版本

    在“pb连接sqlserver所需dll全版本”这个主题中,我们可以讨论以下几个关键知识点: 1. **ODBC驱动**:PB连接SQL Server通常会通过ODBC(Open Database Connectivity)驱动程序。ODBC驱动是一个标准的API,允许应用...

    DBeaver连接sqlserver驱动

    DBeaver是一款强大的数据库管理工具,它支持多种数据库系统,包括SQL Server。在使用DBeaver连接SQL Server时,有时可能会遇到驱动问题,这通常是因为DBeaver内置的驱动不适用于特定版本的SQL Server或者网络环境。...

    登录SQLServer服务器时的服务器名称.pdf

    ### 登录SQL Server服务器时的服务器名称 #### 知识点一:服务器名称的重要性 当我们在本地或远程访问Microsoft SQL Server 2008数据库服务器时,正确地填写服务器名称至关重要。服务器名称用于标识数据库服务器的...

    VBA+SQLServer跨电脑读写数据传输.zip

    本资源"VBA+SQLServer跨电脑读写数据传输.zip"提供了一个详细的方法,利用Visual Basic for Applications(VBA)和Microsoft SQL Server来实现在不同计算机之间的数据交互。这种技术能够有效地提升工作效率,确保...

    Thinkphp 连接 SQL SERVER 类

    首先,`ThinkPHP 连接 SQL SERVER 类`指的是在ThinkPHP项目中创建一个类,专门用于处理与SQL Server数据库的连接、查询和其他操作。这通常涉及到创建自定义的数据驱动(driver)或适配器(adapter),使得ThinkPHP...

    SQLServer连接ACCESS数据库的实现

    ### SQLServer连接ACCESS数据库的实现:深度解析与实践指南 #### 异构数据库连接概览 在企业级应用中,数据库通常不会局限于单一类型或品牌,而是存在多种数据库平台共存的情况,这被称为异构数据库环境。为了实现...

    SQL server 2005 Express与速达的连接问题

    在使用SQL Server 2005 Express时,如果遇到速达软件无法连接到数据库的情况,这通常是由多种因素导致的。根据描述,这里主要讨论的是安装了随附光盘自带的SQL Server 2005 Express版本后,速达软件出现的连接问题。...

    SQLserver无法连接到数据库服务器

    当遇到“SQLserver无法连接到数据库服务器”的问题时,这通常意味着客户端无法成功地建立与SQL Server实例的通信。下面我们将详细探讨这个问题的原因以及给出的解决方案。 首先,无法连接可能源于多种原因,包括但...

    如果命令返回"无法打开连接"的错误信息,则说明服务器端没有启动 SQL Server 服务,

    接下来,使用`telnet`命令测试SQL Server服务器是否正在监听1433端口。如果命令返回“无法打开连接”的错误,意味着服务器可能未启动SQL Server服务,未启用TCP/IP协议,或未在1433端口监听。此时需在服务器上检查...

    sqlserver驱动2012版

    标题中的“sqlserver驱动2012版”指的是SQL Server Native Client 2012,这是微软为SQL Server设计的一款数据库访问接口。SQL Server Native Client(简称SQLNCLI)是用于与SQL Server交互的一种客户端库,它包含了...

Global site tag (gtag.js) - Google Analytics