日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

跨服务器查询

發布時間:2023/12/9 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 跨服务器查询 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在執行跨服務器查詢之前,運行

exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',1
reconfigure

查詢結束后,運行

exec sp_configure 'Ad Hoc Distributed Queries',0
reconfigure
exec sp_configure 'show advanced options',0
reconfigure

方法一:
用OPENDATASOURCE
下面是個跨SQLServer查詢的示例
Select TableA.*,TableB.* From OPENDATASOURCE(
???????? 'SQLOLEDB',
???????? 'Data Source=ServerA;User ID=UserID;Password=Password'
???????? ).databaseAName.dbo.TableA
Left Join
OPENDATASOURCE(
???????? 'SQLOLEDB',
???????? 'Data Source=ServerB;User ID=UserID;Password=Password'
???????? ).databaseBName.dbo.TableB On TableA.key=TableB.key

下面是個查詢的示例,它通過用于 Jet 的 OLE DB 提供程序查詢 Excel 電子表格。
SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions

-------------------------------------

SQL語句實現跨Sql server數據庫操作實例 - 查詢遠程SQL,本地SQL數據庫與遠程SQL的數據傳遞

(1)查詢192.168.1.1的數據庫(TT)表test1的數據
select * from opendatasource('sqloledb','server=192.168.1.1;uid=sa;pwd=123456;database=TT').TT.dbo.test1

(2)從192.168.1.2的數據庫(TT)表test2插入192.168.1.1數據庫(TT)的表test1去
insert into opendatasource('sqloledb','server=192.168.1.1;uid=sa;pwd=123456;database=TT').TT.dbo.test1 (id,[name],password) select id,[name],password
from opendatasource('sqloledb','server=192.168.1.2;uid=sa;pwd=123456;database=TT').TT.dbo.test2

----------------------------------------
方法二(也可以在企業管理器里添加 linkServer):
sp_addlinkedserver
創建一個鏈接的服務器,使其允許對分布式的、針對 OLE DB 數據源的異類查詢進行訪問。在使用 sp_addlinkedserver 創建鏈接的服務器之后,此服務器就可以執行分布式查詢。如果鏈接服務器定義為 Microsoft? SQL Server?,則可執行遠程存儲過程。

語法
sp_addlinkedserver [ @server = ] 'server'
??? [ , [ @srvproduct = ] 'product_name' ]
??? [ , [ @provider = ] 'provider_name' ]
??? [ , [ @datasrc = ] 'data_source' ]
??? [ , [ @location = ] 'location' ]
??? [ , [ @provstr = ] 'provider_string' ]
??? [ , [ @catalog = ] 'catalog' ]

權限
執行許可權限默認授予 sysadmin 和 setupadmin 固定服務器角色的成員。

簡單示例:
//創建linkServer
exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','服務器名'
//登陸linkServer
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用戶名','密碼'
//查詢linkServer的數據庫DataBaseA的表TableA
Select * From srv_lnk.DataBaseA.dbo.TableA
//List the tables in the linked server
EXEC sp_tables_ex txtsrv

示例
A. 使用用于 SQL Server 的 Microsoft OLE DB 提供程序
使用用于 SQL Server 的 OLE DB 創建鏈接服務器
下面的示例創建一臺名為 SEATTLESales 的鏈接服務器,該服務器使用用于 SQL Server 的 Microsoft OLE DB 提供程序。

USE master
GO
EXEC sp_addlinkedserver
??? 'SEATTLESales',
??? N'SQL Server'
GO

在 SQL Server 的實例上創建鏈接服務器
此示例在 SQL Server 的實例上創建一臺名為 S1_instance1 的鏈接服務器,該服務器使用 SQL Server 的 Microsoft OLE DB 提供程序。

EXEC??? sp_addlinkedserver??? @server='S1_instance1', @srvproduct='',
??????????????????????????????? @provider='SQLOLEDB', @datasrc='S1\instance1'

B. 使用用于 Jet 的 Microsoft OLE DB 提供程序
此示例創建一臺名為 SEATTLE Mktg 的鏈接服務器。

說明 本示例假設已經安裝 Microsoft Access 和示例 Northwind 數據庫,且 Northwind 數據庫駐留在 C:\Msoffice\Access\Samples。

USE master
GO
-- To use named parameters:
EXEC sp_addlinkedserver
?? @server = 'SEATTLE Mktg',
?? @provider = 'Microsoft.Jet.OLEDB.4.0',
?? @srvproduct = 'OLE DB Provider for Jet',
?? @datasrc = 'C:\MSOffice\Access\Samples\Northwind.mdb'
GO
-- OR to use no named parameters:
USE master
GO
EXEC sp_addlinkedserver
?? 'SEATTLE Mktg',
?? 'OLE DB Provider for Jet',
?? 'Microsoft.Jet.OLEDB.4.0',
?? 'C:\MSOffice\Access\Samples\Northwind.mdb'
GO

C. 使用用于 Oracle 的 Microsoft OLE DB 提供程序
此示例創建一臺名為 LONDON Mktg 的鏈接服務器,該服務器使用用于 Oracle 的 Microsoft OLE DB 提供程序,并且假設此 Oracle 數據庫的 SQL*Net 別名為 MyServer。

USE master
GO
-- To use named parameters:
EXEC sp_addlinkedserver
?? @server = 'LONDON Mktg',
?? @srvproduct = 'Oracle',
?? @provider = 'MSDAORA',
?? @datasrc = 'MyServer'
GO
-- OR to use no named parameters:
USE master
GO
EXEC sp_addlinkedserver
?? 'LONDON Mktg',
?? 'Oracle',
?? 'MSDAORA',
?? 'MyServer'
GO

D. 將 data_source 參數與用于 ODBC 的 Microsoft OLE DB 提供程序一起使用
此示例創建一臺名為 SEATTLE Payroll 的鏈接服務器,該服務器使用用于 ODBC 的 Microsoft OLE DB 提供程序和 data_source 參數。

說明 在執行 sp_addlinkedserver 之前,必須在服務器上將指定的 ODBC 數據源名稱定義為系統 DSN。

USE master
GO
-- To use named parameters:
EXEC sp_addlinkedserver
?? @server = 'SEATTLE Payroll',
?? @provider = 'MSDASQL',
?? @datasrc = 'LocalServer'
GO
-- OR to use no named parameters:
USE master
GO
EXEC sp_addlinkedserver
?? 'SEATTLE Payroll',
?? '',
?? 'MSDASQL',
?? 'LocalServer'
GO

E. 將 provider_string 參數與用于 ODBC 的 Microsoft OLE DB 提供程序一起使用
此示例創建一臺名為 LONDON Payroll 的鏈接服務器,該服務器使用用于 ODBC 的 Microsoft OLE DB 提供程序和 provider_string 參數。

說明 有關 ODBC 連接字符串的更多信息,請參見 SQLDriverConnect 和如何分配句柄并與 SQL Server (ODBC) 連接。

USE master
GO
-- To use named parameters:
EXEC sp_addlinkedserver
?? @server = 'LONDON Payroll',
?? @provider = 'MSDASQL',
?? @provstr = 'DRIVER={SQL Server};SERVER=MyServer;UID=sa;PWD=;'
GO
-- OR to use no named parameters:
USE master
GO
EXEC sp_addlinkedserver
?? 'LONDON Payroll',
?? '',
?? 'MSDASQL',
?? NULL,
?? NULL,
?? 'DRIVER={SQL Server};SERVER=MyServer;UID=sa;PWD=;'
GO

F. 在 Excel 電子表格上使用用于 Jet 的 Microsoft OLE DB 提供程序
若要創建使用用于 Jet 的 Microsoft OLE DB 提供程序以訪問 Excel 電子表格的鏈接服務器定義,請首先在 Excel 中創建一個命名的范圍以指定要在 Excel 工作表中選擇的行和列。然后,可將此范圍的名稱引用為分布式查詢中的表名稱。

EXEC sp_addlinkedserver 'ExcelSource',
?? 'Jet 4.0',
?? 'Microsoft.Jet.OLEDB.4.0',
?? 'c:\MyData\DistExcl.xls',
?? NULL,
?? 'Excel 5.0'
GO

為了訪問 Excel 電子表格中的數據,請將某個范圍內的單元與某個名稱相關聯。通過將范圍的名稱用作表名稱,可以訪問指定的已命名范圍。下列查詢利用前面設置的鏈接服務器,可訪問稱為 SalesData 的命名范圍。

SELECT *
FROM EXCEL...SalesData
GO

G. 使用用于檢索服務的 Microsoft OLE DB 提供程序
此示例創建一臺鏈接服務器,并且使用 OPENQUERY 從為檢索服務啟用的鏈接服務器和文件系統中檢索信息。

EXEC sp_addlinkedserver FileSystem,
?? 'Index Server',
?? 'MSIDXS',
?? 'Web'
GO
USE pubs
GO
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
????? WHERE TABLE_NAME = 'yEmployees')
?? DROP TABLE yEmployees
GO
CREATE TABLE yEmployees
(
id?????? int???????? NOT NULL,
lname??? varchar(30) NOT NULL,
fname??? varchar(30) NOT NULL,
salary?? money,
hiredate datetime
)
GO
INSERT yEmployees VALUES
(
10,
'Fuller',
'Andrew',
$60000,
'9/12/98'
)
GO
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS
????? WHERE TABLE_NAME = 'DistribFiles')
?? DROP VIEW DistribFiles
GO
CREATE VIEW DistribFiles
AS
SELECT *
FROM OPENQUERY(FileSystem,
???????????????? 'SELECT Directory,
??????????????????? FileName,
??????????????????? DocAuthor,
??????????????????? Size,
??????????????????? Create,
??????????????????? Write
????????????????? FROM SCOPE('' "c:\My Documents" '')
????????????????? WHERE CONTAINS(''Distributed'') > 0
??????????????????? AND FileName LIKE ''%.doc%'' ')
WHERE DATEPART(yy, Write) = 1998
GO
SELECT *
FROM DistribFiles
GO
SELECT Directory,
FileName,
DocAuthor,
hiredate
FROM DistribFiles D, yEmployees E
WHERE D.DocAuthor = E.FName + ' ' + E.LName
GO

H. 使用用于 Jet 的 Microsoft OLE DB 提供程序訪問文本文件
此示例創建一臺直接訪問文本文件的鏈接服務器,而沒有將這些文件鏈接為 Access .mdb 文件中的表。提供程序是 Microsoft.Jet.OLEDB.4.0,提供程序字符串為"Text"。

數據源是包含文本文件的目錄的完整路徑名。schema.ini 文件(描述文本文件的結構)必須與此文本文件存在于相同的目錄中。有關創建 schema.ini 文件的更多信息,請參見 Jet 數據庫引擎文檔。

--Create a linked server
EXEC sp_addlinkedserver txtsrv, 'Jet 4.0',
?? 'Microsoft.Jet.OLEDB.4.0',
?? 'c:\data\distqry',
?? NULL,
?? 'Text'
GO

--Set up login mappings
EXEC sp_addlinkedsrvlogin txtsrv, FALSE, Admin, NULL
GO

--List the tables in the linked server
EXEC sp_tables_ex txtsrv
GO

--Query one of the tables: file1#txt
--using a 4-part name
SELECT *
FROM txtsrv...[file1#txt]

I. 使用用于 DB2 的 Microsoft OLE DB 提供程序
下面的示例創建一臺名為 DB2 的鏈接服務器,該服務器使用用于 DB2 的 Microsoft OLE DB 提供程序。

EXEC sp_addlinkedserver
?? @server='DB2',
?? @srvproduct='Microsoft OLE DB Provider for DB2',
?? @catalog='DB2',
?? @provider='DB2OLEDB',
?? @provstr='Initial Catalog=PUBS;Data Source=DB2;HostCCSID=1252;Network Address=XYZ;Network Port=50000;Package Collection=admin;Default Schema=admin;'

方法三:
OPENQUERY
盡管查詢可能返回多個結果集,但是 OPENQUERY 只返回第一個。

語法
OPENQUERY ( linked_server , 'query' )

參數
linked_server

一個標識符,表示鏈接的服務器的名稱。

'query'

在鏈接的服務器中執行的查詢字符串。

注釋
OPENQUERY 不接受參數變量。

示例
下面的示例利用用于 Oracle 的 Microsoft OLE DB 提供程序針對 Oracle 數據庫創建一個名為 OracleSvr 鏈接的服務器。然后,該示例對此鏈接的服務器使用一個直接傳遞查詢。

說明 本示例假定已經創建了一個名為 ORCLDB 的 Oracle 數據庫別名。

EXEC sp_addlinkedserver 'OracleSvr',
?? 'Oracle 7.3',
?? 'MSDAORA',
?? 'ORCLDB'
GO
SELECT *
FROM OPENQUERY(OracleSvr, 'SELECT name, id FROM joe.titles')
GO

方法四:
OPENROWSET
包含訪問 OLE DB 數據源中的遠程數據所需的全部連接信息。當訪問鏈接服務器中的表時,這種方法是一種替代方法,并且是一種使用 OLE DB 連接并訪問遠程數據的一次性的、特殊的方法。可以在查詢的 FROM 子句中像引用表名那樣引用 OPENROWSET 函數。依據 OLE DB 提供程序的能力,還可以將 OPENROWSET 函數引用為 INSERT、UPDATE 或 DELETE 語句的目標表。盡管查詢可能返回多個結果集,然而 OPENROWSET 只返回第一個。

語法
OPENROWSET ( 'provider_name'
??? , { 'datasource' ; 'user_id' ; 'password'
??????? | 'provider_string' }
??? , { [ catalog.] [ schema.] object
??????? | 'query' }
??? )

示例
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

轉載于:https://www.cnblogs.com/yexinw/archive/2011/05/25/2057164.html

總結

以上是生活随笔為你收集整理的跨服务器查询的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。