O método de dados entre bancos de dados de consulta SQL Server

demanda

Dois serviços de banco de dados SQL Server correspondente servidor, duas tabelas relacionadas dados de consulta.

consultas de mesa única

SELECT * FROM OPENDATASOURCE ( 'SQLOLEDB', 'Fonte de dados = nome da coluna remota real; User ID = sa; Password = password') tabela Nome .dbo biblioteca. 

Por exemplo:

SELECT * FROM OPENDATASOURCE ( 'SQLOLEDB', 'Data Source = 192.168.1.131; User ID = sa; Password = 123456'). BaoGuang_QrCode.dbo.T_BC_BaseInfo

Multi-tabela associada com a consulta (grito casualmente seguinte nome do servidor é escrito)

* SELECT FROM OPENROWSET ( 'SQLOLEDB', '192.168.1.128'; 'sa'; 'ele3561424', EleList.dbo.barCode) A
ADERIR OPENROWSET ( 'SQLOLEDB', '192.168.1.131'; 'sa'; '123456' , BaoGuang_QrCode.dbo.T_BC_BaseInfo) B
ON A.BarCode = B.BarCode
ONDE A.createDate> '2019/12/31 00:00:00'

 

seleccionar * de OPENROWSET ( 'SQLOLEDB', '192.168.10.28'; 'sa'; 'ele3561424', EleList.dbo.barCode) D
onde D.BarCode não em (
SELECCIONAR A.BarCode DE OPENROWSET ( 'SQLOLEDB', '192.168 .10.28 ';' sa ';' ele3561424' , EleList.dbo.barCode) A
ADERIR OPENROWSET ( 'SQLOLEDB', '192.168.10.168'; 'sa'; '123qwe', BaoGuang_QrCode.dbo.T_BC_BaseInfo) B
sobre A. BarCode = B.BarCode
ONDE A.createDate> '2019/12/31 00:00:00')
e D.createDate> '2019/12/31 00:00:00'
e D.BarCode como '2001%%'

 
 

OPENDATASOURCE
não ligar o nome do servidor, e fornecer informações de conexão específicas, como a de quatro partes e uma parte do nome do objeto.

Sintaxe
OPENDATASOURCE (provider_name, init_string)

parâmetros
provider_name

provedor de registro de nomes de PROGID para OLE DB para acessar fontes de dados. tipo de dados provider_name de char, nenhum valor padrão.

init_string

Conexão de strings que será passado para a interface do aplicativo fornece alvo IDataInitialize. sintaxe seqüência do provedor é pares de chave-valor com base, estes pares de palavras-chave de valor separados por ponto e vírgula, por exemplo: "keyword1 = value; keyword2 = valor".

Em Microsoft? Data Access SDK define a sintaxe básica. pares de palavras-chave de valor informações específicas que são suportados, consulte a documentação do provedor. A seguinte tabela lista os parâmetros mais utilizados init_string palavras-chave.

OLE DB valores válidos e a palavra-chave descrição
da fonte de dados nome DBPROP_INIT_DATASOURCE fonte de dados para conectar-se. Diferentes provedores de interpretar isso de diferentes maneiras. Para SQL Server provedor OLE DB, ele vai indicar o nome do servidor. Para provedor Jet OLE DB, ele irá especificar o caminho completo para os arquivos de arquivo ou .xls mdb.
posição DBPROP_INIT_LOCATION você deseja se conectar ao banco de dados.
específico do provedor atributos DBPROP_INIT_PROVIDERSTRING seqüência de conexão estendida.
Connection Timeout DBPROP_INIT_TIMEOUT valor de tempo limite, após o valor de tempo limite, a tentativa de conexão irá falhar.
ID de usuário DBPROP_AUTH_USERID para um ID de usuário para a conexão.
Senha DBPROP_AUTH_PASSWORD para a conexão.
Diretório DBPROP_INIT_CATALOG ligado ao nome do diretório inicial ou padrão quando a fonte de dados.


Notas
funções OPENDATASOURCE podem usar a mesma posição sintaxe Transact-SQL para usar o nome servidor vinculado no. Assim, ele pode ser usado como a primeira porção OPENDATASOURCE nome de quatro partes, o nome refere-se ao nome do SELECT, INSERT, UPDATE ou tabela DELETE ou vista, ou refere-se à instrução EXECUTE procedimento remoto armazenado. Ao executar procedimentos armazenados remotos, OPENDATASOURCE deve se referir a outro SQL Server. não OPENDATASOURCE não aceita a variável argumento.

função OPENROWSET semelhante, OPENDATASOURCE só deve referenciar fontes de dados OLE DB que não são acessados ​​com frequência. Para qualquer número de fontes de dados acessados ​​pouco mais, por favor, defini-los ligados servidor. Se OPENDATASOURCE nem OPENROWSET fornecer links para a funcionalidade completa de definições do servidor, por exemplo, gerenciamento de segurança, e a capacidade de informações de catálogo consulta. Cada chamada OPENDATASOURCE tempo, deve fornecer todas as informações de conexão (incluindo senhas).

Exemplo
O seguinte exemplo dados de acesso a partir de uma tabela, a tabela em outro exemplo de SQL Server.

SELECT *
DE OPENDATASOURCE (
          'SQLOLEDB',
          'Fonte de dados = ServerName; User ID = MyUID; password = minhasenha'
          ) .Northwind.dbo.Categories

A seguir está uma consulta de exemplo, que fornece consultas programa uma planilha do Excel pelo OLE DB Jet.

SELECT *
DE OpenDataSource ( 'Microsoft.Jet.OLEDB.4.0',
   'Fonte de dados = "c: /Finance/account.xls"; ID de utilizador = admin; senha =; Extended Properties = Excel 5.0') ... xactions

OPENROWSET
contém todas as informações de conexão necessárias para acesso remoto aos dados de fonte de dados OLE DB. Descartáveis, métodos especiais ao acessar a tabela no servidor de link, este método é um método alternativo, e usando uma conexão OLE DB e acesso a dados remotos. função OPENROWSET pode ser referenciado como um nome da tabela como referência na cláusula FROM de uma consulta. Com base na capacidade de Provedor de OLE DB, função OPENROWSET também pode ser referenciado como o INSERT tabela de destino, UPDATE ou DELETE. Embora a consulta pode retornar vários conjuntos de resultados, no entanto, OPENROWSET retorna apenas o primeiro.

语法
OPENROWSET ( 'provider_name'
     , { 'fonte de dados'; 'user_id'; 'password'
         | 'provider_string'}
     , {[. Catálogo] [. Esquema] objeto
         | 'consulta'}
     )

参数
'provider_name' 字符串,它代表在注册表中指定的 OLE DB 提供程序的友好名。provider_name 没有默认值。
'datasource' 字符串常量,它对应着某个特定的 OLE DB 数据源。datasource 是将被传递到提供程序 IDBProperties 接口以初始化提供程序的 DBPROP_INIT_DATASOURCE 属性。通常,这个字符串包含数据库文件的名称、数据库服务器的名称,或者提供程序能理解的用于查找数据库的名称。
'user_id' 字符串常量,它是传递到指定 OLE DB 提供程序的用户名。user_id 为连接指定安全上下文,并将它作为 DBPROP_AUTH_USERID 属性传递进来以初始化提供程序。
'password' 字符串常量,它是将被传递到 OLE DB 提供程序的用户密码。当初始化提供程序时,将 password 作为 DBPROP_AUTH_PASSWORD 属性传递进来。
'provider_string' 提供程序特定的连接字符串,将它作为 DBPROP_INIT_PROVIDERSTRING 属性传递进来以初始化 OLE DB 提供程序。通常 provider_string 封装初始化提供程序所需的所有连接信息。
catalog 目录或数据库的名称,其中驻留着指定的对象。
schema   架构的名称或指定对象的对象所有者名称。
object   对象名称,它唯一地标识出将要操作的对象。
'query' 是字符串常量,发送到提供程序并由提供程序执行。Microsoft? SQL Server? 不处理该查询,但处理由提供程序返回的查询结果(直接传递查询)。对于有些提供程序,它们并没有通过表名而是通过命令语言表现自己的表格格式数据,那么将直接传递查询用于这些提供程序是非常有用的。只要查询提供程序支持 OLE DB Command 对象及其强制接口,那么在远程服务器上就支持直接传递查询。有关更多信息,请参见 SQL Server OLE DB 程序员参考。

注释
如果 OLE DB 提供程序在指定的数据源中支持多个目录和架构,那么就需要目录及架构名称。如果 OLE DB 提供程序并不支持目录和架构,那么可以省略 catalog 及 schema 的值。

如果提供程序只支持架构名,那么必须指定一个两部分名称,形式为 schema.object。如果提供程序只支持目录名,那么必须指定一个三部分名称,形式为 catalog.schema.object。

OPENROWSET 不接受参数变量。

权限
OPENROWSET 权限由传递到 OLE DB 提供程序的用户名的权限确定。

示例
A. 将 OPENROWSET 与 SELECT 语句及用于 SQL Server 的 Microsoft OLE DB 提供程序一起使用
下面的示例使用用于 SQL Server 的 Microsoft OLE DB 提供程序访问 pubs 数据库中的 authors 表,该数据库在一个名为 seattle1 的远程服务器上。从 datasource、user_id 及 password 中初始化提供程序,并且使用 SELECT 语句定义返回的行集。

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 与对象及用于 ODBC 的 OLE DB 提供程序一起使用
下面的示例使用用于 ODBC 的 OLE DB 提供程序以及 SQL Server ODBC 驱动程序访问 pubs 数据库中的 authors 表,该数据库在一个名为 seattle1 的远程服务器中。提供程序用在 ODBC 提供程序所用的 ODBC 语法中指定的 provider_string 进行初始化,定义返回的行集时使用 catalog.schema.object 语法。

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. 使用用于 Jet 的 Microsoft OLE DB 提供程序
下面的示例通过用于 Jet 的 Microsoft OLE DB 提供程序访问 Microsoft Access Northwind 数据库中的 orders 表。

说明   下面的示例假定已经安装了 Access。
USE pubs
GO
SELECT a.*
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
    'c:/MSOffice/Access/Samples/northwind.mdb';'admin';'mypwd', Orders)
    AS a
GO

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/Samples/northwind.mdb';'admin';'mypwd', Orders)
    AS o
    ON c.CustomerID = o.CustomerID
GO

上面两个方法的示例:
[OpenDataSource]
    1.
     Select * from OpenDataSource('SQLOLEDB','Data Source=ServerName;User ID=MyID;Password=MyPass').DBName.DBO.TableName
    2.通过用Jet的OLEDB提供程序查询Excel电子表格
     Select * from OpenDataSource('MICROSOFT.JET.OLEDB.4.0','Data Source="c:/account.xls";User ID=Admin;Password=;Extended Properties=Excel 5.0')...Xactions

[OpenRowSet]
    格式:
      OpenRowSet('Provider_Name','{'DataSource';'UserID';'Password'|'Provider_String'},{[CateLog.][Schema.]Object|'Query'})
    1.
     Select A.* from OpenRowSet('SQLOLEDB','ServerName';'UserID';'Password','Select * from pubs.dbo.authors',Orders) as A
    
    2.
     Select A.* from OperRowset('MSDASQL','DRIVER={SQL Server};Server=ServerName;UID=UserID;PWD=MyPass',pus.dbo.Authors) as A
   
    3.Select A.* from OperRowSet('MICROSOFT.JET.OLEDB.4.0','c:/access/northowind.mdb';'UserID';'Password',Orders) AS A
   
    4.Select C.* ,O.* from Northowind.dbo.customers   c
     inner join OpenRowSet('MICROSOFT.JET.OLEDB.4.0','c:/access/northowind.mdb';'Admin';'MyPass',Orders) as o
     on c.CustomerID = o.CustomerID
   
    5.Select * From OpenRowSet('MICROSOFT.JET.OLEDB.4.0','EXCEL 5.0;HDR=YES;IMEX=2;DataBase=D:/Book1.XLS',[sheet1$])

需求

两个服务器上对应的SQL Server数据库服务,关联两张表查询数据。

单表查询

select * from OPENDATASOURCE('SQLOLEDB','Data Source=远程实列名;User ID=sa;Password=密码').库名.dbo.表名 

例如:

select * from OPENDATASOURCE('SQLOLEDB','Data Source=192.168.1.131;User ID=sa;Password=123456').BaoGuang_QrCode.dbo.T_BC_BaseInfo

多表关联查询(下列服务器名是随便写的吆)

SELECT * FROM OPENROWSET('SQLOLEDB','192.168.1.128';'sa';'ele3561424',EleList.dbo.barCode) A
JOIN OPENROWSET('SQLOLEDB','192.168.1.131';'sa';'123456',BaoGuang_QrCode.dbo.T_BC_BaseInfo) B
ON A.BarCode = B.BarCode
WHERE A.createDate>'2019-12-31 00:00:00'

 

select * from OPENROWSET('SQLOLEDB','192.168.10.28';'sa';'ele3561424',EleList.dbo.barCode) D
where D.BarCode not in (
SELECT A.BarCode FROM OPENROWSET('SQLOLEDB','192.168.10.28';'sa';'ele3561424',EleList.dbo.barCode) A
JOIN OPENROWSET('SQLOLEDB','192.168.10.168';'sa';'123qwe',BaoGuang_QrCode.dbo.T_BC_BaseInfo) B
ON A.BarCode = B.BarCode
WHERE A.createDate>'2019-12-31 00:00:00')
and D.createDate>'2019-12-31 00:00:00'
and D.BarCode like'%2001%'

Acho que você gosta

Origin www.cnblogs.com/qqhfeng/p/12619799.html
Recomendado
Clasificación