SQL Server Native Client OLE DB 提供者

MicrosoftSQL Server Native Client OLE DB Provider 可對 MicrosoftSQL Server 資料庫提供 OLE DB 介面。藉由使用 SQL Server Native Client OLE DB Provider,SQL Server 分散式查詢就可以查詢 SQL Server 之遠端執行個體中的資料。

若要建立連結伺服器來存取 SQL Server 資料庫

  • 執行 sp_addlinkedserver 以建立連結伺服器,將執行 SQL Server 之遠端執行個體的伺服器網路名稱指定為 data_source。對於 SQL Server 連結伺服器,指定提供者 (SQLNCLI) 是選擇性 (使用 SQLNCLI 和 SQL Server 將會導向 SQL Server Native Client OLE DB Provider 的最新版)。

    例如,若要建立一個名為 LinkSQLSrvr 的連結伺服器,其運作對象為在網路名稱為 NetSQLSrvr 之伺服器上執行的 SQL Server 執行個體,請執行以下動作:

    sp_addlinkedserver N'LinkSQLSrvr', ' ', N'SQLNCLI', N'NetSQLSrvr'
    sp_addlinkedserver N'LinkSQLSrvr', ' ', ' ', N'NetSQLSrvr'
    

    另外,您可以定義 SQL Server 連結伺服器作為其網路名稱,如以下範例所示:

    sp_addlinkedserver N'NetSQLSrvr'
    

針對在 SQL Server 2000 執行個體上執行的伺服器執行分散式查詢時,我們建議您套用 SQL Server 2000 Service Pack 4 (SP4)。如果尚未套用 SP4,您應該執行 SP4 包含的 Instcat.sql 指令碼,以升級目錄預存程序。

當分散式查詢執行於正執行 SQL Server 7.0 版或較早版本的伺服器上,就必須將較早版本的目錄預存程序予以升級,以確保分散式查詢可正確運作。例如,如果伺服器正執行 SQL Server 7.0 版的執行個體,伺服器上的目錄預存程序必須先升級至 SQL Server 2008,執行 SQL Server 2008 執行個體之伺服器的分散式查詢才能參考該預存程序。

當遠端的 SQL Server 資料表更新時,本機伺服器或用戶端並不會收到該更新所觸動之觸發程序產生的任何結果集或訊息。

在使用四部份名稱 (Four-part Name) 時,一定要指定結構描述 (Schema) 名稱。若沒有在分散式查詢內指定結構描述名稱,OLE DB 就無法找到資料表。在參考本機資料表時,如果未指定擁有者名稱,SQL Server 就會使用預設值。即使連結伺服器登入對應到連結伺服器上 AdventureWorks 資料庫的 dbo 使用者,以下的 SELECT 陳述式仍將產生 7314 錯誤:

sp_addlinkedserver @server = N'LinkServer',
    @srvproduct = N' ',
    @provider = N'SQLNCLI', 
    @datasrc = N'ServerNetName', 
    @catalog = N'AdventureWorks'
GO
SELECT *
FROM LinkServer.AdventureWorks.dbo.Vendor

以下範例定義了連結伺服器與遠端伺服器,而且兩者都會存取網路名稱為 othersite 的同一台電腦。連結伺服器定義將使用同樣的名稱作為遠端伺服器的網路名稱;遠端伺服器定義則使用另一個名稱。

/* Create a linked server definition to othersite. */
EXEC sp_addlinkedserver 'othersite', N'SQL Server'

/* Create a remote server definition using a
   fictitious name. */
EXEC sp_addserver 'RPCothersite'

/* Set the fictitious name to the network name far away. */
EXEC sp_setnetname 'RPCothersite', 'othersite'

這些名稱可被分散式查詢或遠端程序呼叫所參考。

/* A distributed query referencing othersite. */
SELECT *
FROM othersite.Northwind.dbo.Employees
/* A remote procedure call to the same server. */
EXEC RPCothersite.master.dbo.sp_who
/* Distributed queries can be used to execute
   stored procedures on the other server. */
EXEC othersite.master.dbo.sp_who

透過連結伺服器執行之預存程序與透過遠端伺服器執行之預存程序的登入對應機制並不一樣。如需詳細資訊,請參閱<連結伺服器>。

使用分散式查詢的交易考量

MicrosoftSQL Server Native Client OLE DB Provider 不支援巢狀交易。因此,XACT_ABORT 必須設為 ON,才能在涉及多個 Transact-SQL 陳述式的交易內進行資料修改作業,以及對分散式的分割檢視 (Partitioned Views) 進行資料修改作業。