OLE DB Provider for Jet

Microsoft OLE DB Provider for Jet 會提供 Microsoft Access 資料庫的 OLE DB 介面,並且允許 SQL Server 2005 及更新版本的分散式查詢可查詢 Access 資料庫及 Excel 試算表。

若要下載 Microsoft Office 2007 驅動程式,請參閱 2007 Office System 驅動程式:資料連線元件

提示提示

若要連接到 Microsoft Access,SQL Server 必須啟動 Microsoft Access Database Engine。與其他大部分提供者不同之處在於,Microsoft Access 不是輕量型提供者,而是完整的 Microsoft Access Database Engine。因此,在 SQL Server 處理序空間中開啟 Microsoft Access 可能會由於磁碟、處理器或記憶體資源不足而導致失敗。錯誤包括「無法初始化 OLE DB 提供者的資料來源物件」。為了避免發生記憶體不足的錯誤,請將提供者設定為在 SQL Server 記憶體處理序空間外部開啟。

若要在 SQL Server 記憶體空間外部執行 Microsoft Access

  1. 在 SQL Server Management Studio 的 [物件總管] 中,依序展開 SQL Server 名稱、[伺服器物件][連結的伺服器][提供者]、以滑鼠右鍵按一下 Microsoft Access 提供者 [Microsoft.ACE.OLEDB.12.0][Microsoft.Jet.OLEDB.4.0],然後按一下 [屬性]

  2. [提供者選項] 方塊中,取消核取 [允許 Inprocess]

  3. 按一下 [確定]。

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

  1. 執行 sp_addlinkedserver 來建立連結伺服器,並指定 Microsoft.Jet.OLEDB.4.0 做為 provider_name,然後將 Access .mdb 資料庫檔案的完整路徑名稱指定為 data_source。.mdb 資料庫檔案必須位在伺服器上。data_source 是在伺服器上評估,而不是在用戶端上評估,而且路徑在伺服器中必須是有效的。

    例如,若要建立一個名稱為 Nwind 的連結伺服器,並對 c:\mydata directory 中名稱為 Nwind.mdb 的 Access 資料庫運作,請執行:

    sp_addlinkedserver 'Nwind', 'Access', 'Microsoft.Jet.OLEDB.4.0', 
       'c:\mydata\Nwind.mdb'
    
  2. 若要存取不安全的 Access 資料庫,嘗試存取 Access 資料庫的 SQL Server 登入應該要定義登入對應,對應到使用者名稱 Admin 但沒有密碼。

    以下範例可讓本機使用者 Joe 能夠存取名稱為 Nwind 的連結伺服器。

    sp_addlinkedsrvlogin 'Nwind', false, 'Joe', 'Admin', NULL
    

    若要存取安全的 Access 資料庫,請使用登錄編輯器設定登錄,以使用 Access 所用的正確「工作群組資訊」檔案。使用 [登錄編輯器] 將 Access 所用之「工作群組資訊」檔案的完整路徑名稱加到此登錄項目:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\SystemDB

  3. 登錄項目設定完成後,使用 sp_addlinkedsrvlogin 來建立本機登入到 Access 登入的登入對應:

    sp_addlinkedsrvlogin 'Nwind', false, 'Joe',
        'AccessUser', '034fhd99dl'
    
安全性注意事項安全性注意事項

這個範例不使用 Windows 驗證。密碼會以未經加密的方式傳輸。在儲存於磁碟的資料來源定義和指令碼中、備份中和記錄檔中,可能看得見密碼。請勿在這種連接中使用管理員密碼。如需您環境的特定安全性指引,請連絡您的網路管理員。

Access 資料庫並沒有資料庫目錄與結構描述名稱。因此,您可使用 linked_server**...**table_name 格式的四部份名稱,在分散式查詢內參考 Access 型連結伺服器中的資料表。

以下範例將從名稱為 Nwind 之連結伺服器的 Employees 資料表中,擷取所有的資料列。

SELECT * 
FROM Nwind...Employees

若要對 Excel 試算表建立連結伺服器

Microsoft OLE DB Provider for Jet 4.0 可用來存取 Microsoft Excel 試算表。

  • 若要建立可存取 Excel 試算表的連結伺服器,請使用以下範例的格式:

    EXEC sp_addlinkedserver EXCEL,
         'Jet 4.0',
         'Microsoft.Jet.OLEDB.4.0',
         'c:\data\MySheet.xls', 
          NULL,
         'Excel 5.0;'
    
    GO
    
  • 若要存取 Excel 試算表中的資料,請建立資料格範圍與某個名稱的關聯性。您可使用範圍名稱作為資料表名稱來存取具名範圍。以下查詢可使用上個範例中建立的連結伺服器,來存取名稱為 SalesData 的具名範圍。

    SELECT *
    FROM EXCEL...SalesData
    GO
    

當您將資料列插入資料格的具名範圍時,此資料列會加到資料格之具名範圍內的最後一個資料列後面。因此,若您想要將資料列 rA 插入到資料行標題後面,請將資料行標題資料格與一個名稱建立關聯,然後再使用該名稱作為資料表名稱。當插入資料列時,資料格範圍會自動擴大。

對格式化文字設定連結伺服器

Microsoft OLE DB Provider for Jet 可用來存取及查詢文字檔。

  • 若要建立連結伺服器,以便直接存取文字檔,而不需將檔案連結為 Access .mdb 檔內的資料表,請執行 sp_addlinkedserver,如以下範例所示。

    提供者是 Microsoft.Jet.OLEDB.4.0,而提供者字串是 'Text'。資料來源是文字檔所在目錄的完整路徑名稱。Schema.ini 檔和文字檔必須在相同的目錄中。Schema.ini 檔會描述文字檔的結構。如需有關如何建立 Schema.ini 檔的詳細資訊,請參閱 Jet Database Engine 文件集。

    --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, NULL, Admin, NULL
    GO
    
    --List the tables in the linked server.
    EXEC sp_tables_ex txtsrv
    GO
    
    --Query one of the tables: file1#txt
    --by using a four-part name. 
    SELECT * 
    FROM txtsrv...[file1#txt]