Share via


關於大量匯入和大量匯出作業

Microsoft SQL Server 2005 支援從 SQL Server 資料表大量匯出資料,以及將資料大量匯入 SQL Server 資料表或非資料分割的檢視。有下列基本方法可用。

方法 描述 匯入資料 匯出資料

bcp 公用程式

可大量匯出和大量匯入資料並產生格式檔案的命令列公用程式 (Bcp.exe)。

BULK INSERT 陳述式

Transact-SQL 陳述式,可將資料直接從資料檔案匯入至資料庫資料表或非資料分割的檢視。

INSERT ...SELECT * FROM OPENROWSET(BULK...) 陳述式

Transact-SQL 陳述式,其指定 OPENROWSET(BULK…) 函數選取 INSERT 陳述式中的資料,以使用 OPENROWSET 大量資料列集提供者,將資料大量匯入 SQL Server 資料表。

同處理序與跨處理序的作業

BULK INSERT 陳述式 和 OPENROWSET(BULK) 函數與 SQL Server 執行於同處理序,共用相同的記憶體位址空間。因為資料檔是由 SQL Server 處理序所開啟,因此在用戶端處理序和 SQL Server 處理序之間並不會複製資料。如需有關使用 BULK INSERT 或 INSERT ...SELECT * FROM OPENROWSET(BULK...) 匯入資料時的安全性考量,請參閱<使用 BULK INSERT 或 OPENROWSET(BULK...) 匯入大量資料>。

相反地,bcp 公用程式會跨處理序執行。若要在處理序記憶體空間之間移動資料,bcp 必須使用*「處理序間資料封送處理」「處理序間資料封送處理」*是將方法呼叫的參數轉換成位元組資料流的程序。這會大量增加處理器的負擔。不過,因為 bcp 會剖析資料並在用戶端處理序中將資料轉換成原生儲存格式,所以可以從 SQL Server 處理序中卸載剖析和資料轉換。因此,如果您有 CPU 限制,可以在有不只一個 CPU 的電腦上,或在不同電腦上使用 bcp 來獲得較佳的大量匯入效能,而不要使用 BULK INSERT 或 INSERT ...SELECT * FROM OPENROWSET(BULK)。

格式檔案

bcp 公用程式、BULK INSERT 和 INSERT ...SELECT * FROM OPENROWSET(BULK...) 全都支援使用特殊的*「格式檔案」*,以儲存資料檔案中每一個欄位的格式資訊。格式檔案也可以包含對應的 SQL Server 資料表的相關資訊。對 SQL Server 執行個體大量匯出與大量匯入資料時,格式檔案可以提供所需的所有格式資訊。

格式檔案提供彈性方式,在匯入期間用於解譯資料檔中的資料,以及在匯出期間用於格式化資料檔中的資料。這樣的彈性讓您不需撰寫特殊用途的程式碼來解譯資料,也不需因應 SQL Server 或外部應用程式的特定需求將資料重新格式化。例如,如果您要大量匯出資料以載入需要逗號分隔值的應用程式,則可以使用格式檔案,在匯出的資料中插入逗號,當作欄位結束字元。

SQL Server 2005 支援兩種格式檔案:XML 格式檔案和非 XML 格式檔案。舊版的 SQL Server 支援非 XML 格式檔案;XML 格式檔案是 SQL Server 2005 的新功能。

bcp 命令是唯一可以產生格式檔案的工具。如需詳細資訊,請參閱<建立格式檔案>。如需有關格式檔案的詳細資訊,請參閱<用於匯入或匯出資料的格式檔案>。

ms187042.note(zh-tw,SQL.90).gif附註:
萬一在大量匯出或匯入作業期間未提供格式檔案,使用者可以選擇在命令列覆寫預設格式。

查詢處理器和大量匯入

為了將資料大量匯入 SQL Server 的執行個體,bcp 公用程式、BULK INSERT 陳述式和 INSERT ...SELECT * FROM OPENROWSET(BULK...) 陳述式都會搭配使用查詢處理器。

這三個方法都會將資料檔案中的資料轉換成 OLEDB 資料列集。但是轉換方法各有不同,如下所述:

  • bcp 公用程式讀取資料檔案,並將 TDS 資料流傳送至 SQL Server 大量複製程式 (BCP) API,此 API 便會將資料轉換為 OLE DB 資料列集。
  • BULK INSERT 和 OPENROWSET 大量資料列集提供者都會將檔案資料直接轉換為 OLE DB 資料列集。

查詢處理器會將 OLE DB 資料列集插入目標資料表中,並自行規劃及最佳化每一項作業。

效能考量

當有大量資料要匯入時,效能考量因素也就顯得相當重要。在某些情況下,變更大量匯入或大量匯出作業處理下列其中一項或多項的方式,將可以改進效能:

  • 批次參數
  • CHECK 條件約束的條件約束檢查
  • 記錄大量交易的方式。這與通常使用完整復原模式的資料庫有關。
  • 排序匯出的資料
  • 平行資料匯入
  • 資料表鎖定
  • 觸發程序執行

如需詳細資訊,請參閱<最佳化大量匯入效能>。

ms187042.note(zh-tw,SQL.90).gif附註:
大量匯出作業並沒有什麼特別的最佳化技術。這些作業不過是使用 SELECT 陳述式,從來源資料表中選取資料而已。

請參閱

概念

大量匯入資料的基本指導方針
用於匯入或匯出資料的資料格式
大量匯入及匯出資料的實例
單一 SQL 陳述式處理

其他資源

Performing Bulk Load of XML Data (SQLXML 4.0)
SQL Server Integration Services
Performing Bulk Copy Operations
bcp 公用程式
BULK INSERT (Transact-SQL)
用於匯入或匯出資料的格式檔案
OPENROWSET (Transact-SQL)

說明及資訊

取得 SQL Server 2005 協助