關於大量匯入和大量匯出作業
Microsoft SQL Server 2005 支援從 SQL Server 資料表大量匯出資料,以及將資料大量匯入 SQL Server 資料表或非資料分割的檢視。有下列基本方法可用。
方法 | 描述 | 匯入資料 | 匯出資料 |
---|---|---|---|
可大量匯出和大量匯入資料並產生格式檔案的命令列公用程式 (Bcp.exe)。 |
是 |
是 |
|
Transact-SQL 陳述式,可將資料直接從資料檔案匯入至資料庫資料表或非資料分割的檢視。 |
是 |
否 |
|
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 命令是唯一可以產生格式檔案的工具。如需詳細資訊,請參閱<建立格式檔案>。如需有關格式檔案的詳細資訊,請參閱<用於匯入或匯出資料的格式檔案>。
附註: |
---|
萬一在大量匯出或匯入作業期間未提供格式檔案,使用者可以選擇在命令列覆寫預設格式。 |
查詢處理器和大量匯入
為了將資料大量匯入 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 條件約束的條件約束檢查
- 記錄大量交易的方式。這與通常使用完整復原模式的資料庫有關。
- 排序匯出的資料
- 平行資料匯入
- 資料表鎖定
- 觸發程序執行
如需詳細資訊,請參閱<最佳化大量匯入效能>。
附註: |
---|
大量匯出作業並沒有什麼特別的最佳化技術。這些作業不過是使用 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)