OPENDATASOURCE (Transact-SQL)

適用於:SQL ServerAzure SQL 受控執行個體

提供特定連接資訊做為四部分物件名稱,而不使用連結伺服器名稱。

Transact-SQL 語法慣例

Syntax

OPENDATASOURCE ( 'provider_name', 'init_string' )  

注意

若要檢視 SQL Server 2014 (12.x) 和舊版的 Transact-SQL 語法,請參閱 舊版檔

引數

'provider_name'

這是登錄為 OLE DB 提供者之 PROGID 的名稱,以用來存取資料來源。 provider_name 為沒有預設值的 char 資料類型。

重要

SQL Server Native Client (通常縮寫為 SNAC) 已從 SQL Server 2022 (16.x) 和 SQL Server Management Studio 19 (SSMS) 中移除。 不建議使用 SQL Server Native Client OLE DB 提供者 (SQLNCLI 或 SQLNCLI11) 和舊版 Microsoft OLE DB Provider for SQL Server (SQLOLEDB) 進行新的開發。 請切換至新的 Microsoft OLE DB Driver (MSOLEDBSQL) for SQL Server 以繼續使用。

'init_string'

為傳遞到目的地提供者 IDataInitialize 介面的連接字串。 提供者字串語法是以分號隔開的索引鍵值組為基礎,例如:'keyword1=value;keyword2=value'

如需提供者上支援的特定關鍵字/值組,請參閱 Microsoft Data Access SDK。 這份文件集定義基本語法。 下表列出 init_string 引數最常使用的關鍵字。

關鍵字 OLE DB 屬性 有效值和描述
資料來源 DBPROP_INIT_DATASOURCE 要連接的資料來源名稱。 不同提供者以不同方式解譯這個名稱。 如果是 SQL Server Native Client OLE DB 提供者,這表示伺服器的名稱。 如果是 Jet OLE DB 提供者,這表示 .mdb 檔或 .xls 檔的完整路徑。
Location DBPROP_INIT_LOCATION 要連接的資料庫位置。
擴充屬性 DBPROP_INIT_PROVIDERSTRING 提供者特定連接字串。
連接逾時 DBPROP_INIT_TIMEOUT 逾時值,在此之後連線嘗試會失敗。
使用者識別碼 DBPROP_AUTH_USERID 用於連接的使用者識別碼。
密碼 DBPROP_AUTH_PASSWORD 用於連接的密碼。
目錄 DBPROP_INIT_CATALOG 連接到資料來源的初始或預設目錄名稱。
整合式安全性 DBPROP_AUTH_INTEGRATED SSPI,用來指定 Windows 驗證

備註

OPENROWSET 一律會繼承執行個體定序,而不會考慮資料行的定序集。

唯有針對指定的提供者將 DisallowAdhocAccess 登錄選項明確設定為 0,且已啟用 [隨選分散式查詢] 進階設定選項時,才能使用 OPENDATASOURCE 來存取 OLE DB 資料來源的遠端資料。 若未設定這些選項,預設行為便不允許特定存取。

OPENDATASOURCE 函數可用於與連結伺服器名稱相同的 Transact-SQL 語法位置。 因此,OPENDATASOURCE 可作為四部分名稱的第一部分使用,其參考 SELECT、INSERT、UPDATE 或 DELETE 陳述式中的資料表或檢視名稱,或參考 EXECUTE 陳述式中的遠端預存程序。 執行遠端預存程序時,OPENDATASOURCE 應該參考 SQL Server 的其他執行個體。 OPENDATASOURCE 不接受變數做為其引數。

如同 OPENROWSET 函式,OPENDATASOURCE 只應該參考不常存取的 OLE DB 資料來源。 請為存取多次的資料來源定義連結伺服器。 OPENDATASOURCE 或 OPENROWSET 都不提供連結伺服器定義的所有功能,例如安全性管理和查詢目錄資訊的能力。 每次在呼叫 OPENDATASOURCE 時,都必須提供所有連接資訊,包括密碼在內。

重要

Windows 驗證比 SQL Server 驗證更安全。 可能的話,您應該使用 Windows 驗證。 OPENDATASOURCE 不應與連接字串中的明確密碼一起使用。

每一個提供者的連接需求都類似於建立連結伺服器時的參數需求。 sp_addlinkedserver (Transact-SQL) 文章提列了許多常見提供者的詳細資料。

FROM 子句中 OPENDATASOURCEOPENQUERYOPENROWSET 的任何呼叫都會與當做更新目標使用之這些函數的任何呼叫進行個別且獨立的評估,即使完全相同的引數套用至這兩種呼叫也一樣。 尤其,針對其中一個呼叫結果所套用的篩選或聯結條件對於另一個呼叫的結果沒有作用。

權限

任何使用者都可以執行 OPENDATASOURCE。 您可以從連接字串判斷用來連接到遠端伺服器的權限。

範例

A. 搭配 SELECT 和 SQL Server OLE DB Driver 使用 OPENDATASOURCE

下列範例會使用 Microsoft OLE DB Driver for SQL Server 來存取遠端伺服器 Seattle1AdventureWorks2022 資料庫中的 HumanResources.Department 資料表。 SELECT 陳述式是用來定義傳回的資料列集。 提供者字串包含 ServerTrusted_Connection 關鍵字。 SQL Server OLE DB Driver 會辨識這些關鍵字。

SELECT GroupName, Name, DepartmentID  
FROM OPENDATASOURCE('MSOLEDBSQL', 'Server=Seattle1;Database=AdventureWorks2022;TrustServerCertificate=Yes;Trusted_Connection=Yes;').HumanResources.Department  
ORDER BY GroupName, Name;  

B. 搭配 SELECT 和 SQL Server OLE DB 提供者使用 OPENDATASOURCE

下列範例會為伺服器 London 上的 SQL Server 執行個體 Payroll 建立隨選連線,並查詢 AdventureWorks2022.HumanResources.Employee 資料表。

注意

使用 SQLNCLI 會將 SQL Server 重新導向最新版本的 SQL Server Native Client OLE DB 提供者。 OLE DB 提供者預期會登錄在登錄中指定的 PROGID。

重要

SQL Server Native Client OLE DB 提供者 (SQLNCLI) 仍然會淘汰,因此不建議用於新的開發工作。 請改為使用新的 Microsoft OLE DB Driver for SQL Server (MSOLEDBSQL),其會進行更新且具備最新的伺服器功能。

SELECT *  
FROM OPENDATASOURCE('SQLNCLI',  
    'Data Source=London\Payroll;Integrated Security=SSPI')  
    .AdventureWorks2022.HumanResources.Employee;  

C. 使用 Microsoft OLE DB Provider for Jet

下列範例會建立與 1997 - 2003 格式之 Excel 試算表的特定連接。

SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',  
    'Data Source=C:\DataFolder\Documents\TestExcel.xls;Extended Properties=EXCEL 5.0')...[Sheet1$] ;  

下一步