共用方式為


使用 BULK INSERT 或 OPENROWSET(BULK...) 匯入大量資料

更新: 2006 年 7 月 17 日

本主題提供一個概觀,說明如何使用 Transact-SQL BULK INSERT 陳述式與 INSERT...SELECT * FROM OPENROWSET(BULK...) 陳述式,從資料檔大量匯入資料到 Microsoft SQL Server 資料表中。本主題也將說明有關使用 BULK INSERT 和 OPENROWSET(BULK…),以及使用這些方法從遠端資料來源大量匯入時的安全性考量。

ms175915.note(zh-tw,SQL.90).gif附註:
當您使用 BULK INSERT 或 OPENROWSET(BULK…) 時,瞭解 SQL Server 2005 處理模擬的方式相當重要。如需詳細資訊,請參閱本主題稍後的「安全性考量」。

BULK INSERT 陳述式

BULK INSERT 會從資料檔案將資料載入資料表。此功能與 bcp 命令的 in 選項相似,但卻是由 SQL Server 處理序來讀取資料檔案。如需 BULK INSERT 語法的描述,請參閱<BULK INSERT (Transact-SQL)>。

範例

如需 BULK INSERT 範例,請參閱:

OPENROWSET(BULK…) 函數

SQL Server 2005 導入 OPENROWSET 大量資料列集提供者,可透過呼叫 OPENROWSET 函數及指定 BULK 選項加以存取。OPENROWSET(BULK…) 函數可讓您透過 OLE DB 提供者連接到遠端資料來源 (例如資料檔案),以存取遠端資料。

若要大量匯入資料,請從 INSERT 陳述式內的 SELECT…FROM 子句呼叫 OPENROWSET(BULK…)。大量匯入資料的基本語法是:

INSERT ...SELECT * FROM OPENROWSET(BULK...)

當用於 INSERT 陳述式時,OPENROWSET(BULK...) 支援資料表提示。除了一般的資料表提示 (例如 TABLOCK) 之外,BULK 子句也接受下列特定的資料表提示:IGNORE_CONSTRAINTS (僅忽略 CHECK 條件約束)、IGNORE_TRIGGERS、KEEPDEFAULTS 和 KEEPIDENTITY。如需詳細資訊,請參閱<資料表提示 (Transact-SQL)>。

如需有關 BULK 選項其他用法的詳細資訊,請參閱<OPENROWSET (Transact-SQL)>。

範例

如需 INSERT...SELECT * FROM OPENROWSET(BULK...) 陳述式的範例,請參閱下列主題:

安全性考量

如果使用者是使用 SQL Server 登入,則會使用 SQL Server 處理序帳戶的安全性設定檔。

相反地,如果 SQL Server 使用者是使用 Windows 驗證登入,則該使用者只能讀取使用者帳戶可以存取的檔案,這與 SQL Server 處理序的安全性設定檔是無關的。

例如,有個使用者使用 Windows 驗證登入了 SQL Server 執行個體。如果這個使用者要用 BULK INSERT 或 OPENROWSET 從資料檔匯入資料到 SQL Server 資料表中,則使用者帳戶必須具有資料檔案的讀取權限。有了資料檔案的存取權之後,即使 SQL Server 處理序沒有權限存取檔案,使用者還是可以將檔案中的資料匯入到資料表。使用者不需要將檔案存取權限授與 SQL Server 處理序。

SQL Server 和 Microsoft Windows 可以設定為,透過轉送已驗證 Windows 使用者的認證,讓 SQL Server 執行個體連接到另一個 SQL Server 執行個體。此設置也稱為*「模擬」「委派」*。當您使用 BULK INSERT 或 OPENROWSET 時,請務必瞭解 SQL Server 2005 如何處理使用者模擬的安全性。使用者模擬允許資料檔案位於和 SQL Server 處理序或使用者不同的電腦上。例如,如果位於 Computer_A 的使用者可以存取 Computer_B 上的資料檔,且已適當設定認證委派,則使用者可以連接到執行於 Computer_C 上的 SQL Server 執行個體,然後存取 Computer_B 上的資料檔,並從該檔案大量匯入資料到 Computer_C 上的資料表。如需詳細資訊,請參閱<模擬概觀>。

ms175915.note(zh-tw,SQL.90).gif附註:
SQL Server 2005 控制檔案存取權的方式可解決 Microsoft SQL Server 2000 或舊版中存在的安全性問題。過去,使用者經過驗證後,對外部檔案的存取就是以 SQL Server 處理序的安全性設定檔為基礎。當 SQL Server 處理序具有讀取某個檔案的存取權,但使用者沒有該檔案的存取權時,如果使用者屬於 bulkadmin 固定伺服器角色成員,則還是可以利用 BULK INSERT 匯入檔案和存取檔案的內容。

從遠端資料檔大量匯入

若要使用 BULK INSERT 或 INSERT...SELECT * FROM OPENROWSET(BULK...) 從另一部電腦大量匯入資料,則必須在兩部電腦之間共用資料檔。若要指定共用資料檔,請使用它的通用命名慣例 (UNC) 名稱,它使用一般格式:\\<Servername>\<Sharename>\<Path>\<Filename>。SQL Server 使用的使用者帳戶必須獲授與必要權限才能讀取遠端磁碟上的檔案。

例如,下列 BULK INSERT 陳述式會從名為 newdata.txt 的資料檔大量匯入資料到 AdventureWorks 資料庫的 SalesOrderDetail 資料表。此資料檔位於 computer2 系統上的 salesforce 網路共用目錄上的 \dailyorders 共用資料夾中。

BULK INSERT AdventureWorks.Sales.SalesOrderDetail
   FROM '\\computer2\salesforce\dailyorders\neworders.txt';
GO
ms175915.note(zh-tw,SQL.90).gif附註:
這個限制並不適用於 bcp 公用程式,因為用戶端可以獨立讀取檔案,不受 SQL Server 影響。

請參閱

概念

匯入和匯出大量資料
關於大量匯入和大量匯出作業
大量匯入資料的基本指導方針

其他資源

INSERT (Transact-SQL)
模擬概觀
INSERT (Transact-SQL)
SELECT 子句 (Transact-SQL)
OPENROWSET (Transact-SQL)
SELECT (Transact-SQL)
FROM (Transact-SQL)
bcp 公用程式
BULK INSERT (Transact-SQL)

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2006 年 7 月 17 日

變更的內容:
  • bcp 公用程式的相關內容移動到新的主題<使用 bcp 公用程式匯入和匯出大量資料>。
  • 修訂「OPENROWSET(BULK…) 函數」一節。
  • 插入「安全性考量」與「從遠端資料檔大量匯入」小節。
  • 新增含範例之概念主題的「其他範例」連結。

2005 年 12 月 5 日

新增內容:
  • 新增有關如何使用 Transact-SQL 命令從遠端資料檔匯入資料的討論。