準備資料以進行大量匯出或匯入

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

本節討論關於大量匯出作業之規劃與大量匯入作業之需求的考量。

注意

如果您不確定如何格式化資料檔案以進行大量匯入,請使用 bcp 公用程式將資料從資料表匯出至資料檔。 此檔案中每個資料欄位的格式會顯示將資料大量匯入對應資料表資料行所需的格式。 請使用資料檔案欄位的相同資料格式。

大量匯出的資料檔格式考量

使用 bcp 命令執行大量匯出作業之前,請考慮下列事項:

  • 將資料匯出至檔案時, bcp 命令會使用指定的檔案名稱自動建立資料檔。 如果該檔名已在使用中,則大量複製到資料檔的資料會覆寫檔案現有的內容。

  • 從資料表或檢視大量匯出到資料檔案,需要大量複製的資料表或檢視之 SELECT 權限。

  • SQL Server 可使用平行掃描來擷取資料。 因此,從 SQL Server 執行個體大量匯出的資料表資料列,通常不能保證在資料檔案中具有特定順序。 若要讓大量匯出的資料表資料列以特定順序顯示在資料檔案中,請使用 queryout 選項從查詢進行大量匯出,以及指定 ORDER BY 子句。

大量匯入的資料檔格式需求

若要從資料檔匯入資料,該檔案必須符合下列基本需求:

  • 資料必須為資料列與資料行的格式。

注意

因為在大量匯入處理期間可略過或重新排列資料行,資料檔案的結構並不需要與 SQL Server 資料表的結構相同。

  • 資料檔中的資料必須為支援的格式,如字元或原生格式。

  • 資料的格式可以是字元或原生二進位格式,包括 Unicode。

  • 若要使用 bcp 命令、BULK INSERT 陳述式或 INSERT ... SELECT * FROM OPENROWSET(BULK...) 陳述式來匯入資料,目的地資料表必須已經存在。

  • 資料檔中的每個欄位都必須與目標資料表中的對應資料行相容。 例如,無法將 int 欄位載入 datetime 資料行。 如需詳細資訊,請參閱大量匯入或大量匯出的資料格式 (SQL Server)使用 bcp 指定相容性的資料格式 (SQL Server)

    注意

    若要指定從資料檔案而非整個檔案中匯入資料列子集,您可以將 bcp 命令與 -F <first_row> 參數及/或 -L <last_row> 參數搭配使用。 如需相關資訊,請參閱 bcp Utility

  • 若要從包含固定長度或固定寬度欄位的資料檔案匯入資料,請使用格式檔案。 如需詳細資訊,請參閱 XML 格式檔案 (SQL Server)

  • 從 SQL Server 2017 (14.x) 開始,CSV 檔案可用作資料檔案,以便將資料大量匯入 SQL Server。 CSV 檔案的欄位結束字元不必是逗號。 為了能夠當做資料檔使用來進行大量匯入,CSV 檔案必須符合下列限制:

    • 資料欄位永遠不會包含欄位結束字元。

    • 引號 ("") 中會括住資料欄位內的所有值或是不括住任何值。

      若要從 Microsoft FoxPro 或 Visual FoxPro 資料表 (.dbf) 檔案或 Microsoft Excel 工作表 (.xls) 檔案大量匯入資料,您必須將該資料轉換成符合前述限制的 CSV 檔案。 副檔名通常為 .csv。 然後,您就可以在 SQL Server 大量匯入作業中,將此 .csv 檔案用作資料檔案。

      在 32 位元系統 (SQL Server 2014 (12.x) 和舊版) 上,您可以將 OPENROWSET 與 OLE DB 提供者搭配使用,來將 CSV 資料匯入 SQL Server 資料表,而不需要將大量匯入最佳化。 Jet 會將文字檔視為資料表,其中包含與資料來源位於相同目錄中之 schema.ini 檔案所定義的結構描述。 針對 CSV 資料,schema.ini 檔案中的其中一個參數會是 "FORMAT=CSVDelimited"。 若要使用此解決方案,您需要了解 Jet Text IISAM 如何運作 (其連接字串語法、schema.ini 用法、登錄設定選項等)。此資訊的最佳來源為 Microsoft Access 說明以及知識庫 (KB) 文件。 如需詳細資訊,請參閱初始化文字資料來源驅動程式如何搭配安全保護 Access 資料庫的連結伺服器使用 SQL Server 7.0 分散式查詢如何:使用 Jet OLE DB Provider 4.0 連線到 ISAM 資料庫 ,以及如何使用 Jet 提供者的文字 IIsam 開啟分隔的文字檔

此外,將資料從資料檔案大量匯入到資料表具有下列需求:

  • 使用者必須具有該資料表的 INSERTSELECT 權限。 使用者在使用需要資料定義語言 (DDL) 作業的選項 (如停用條件約束) 時,也需要 ALTER TABLE 權限。

  • 當您使用 BULK INSERTINSERT ... SELECT * FROM OPENROWSET(BULK...) 來大量匯入資料時,SQL Server 處理序的安全性設定檔 (若使用者利用 SQL Server 提供的登入來登入) 和用於委託安全性的 Microsoft Windows 登入,必須可存取資料檔案以進行讀取作業。 此外,使用者必須具有 ADMINISTER BULK OPERATIONS 權限才能讀取檔案。

注意

系統並不支援大量匯入到資料分割檢視,而嘗試將資料大量匯入到資料分割檢視會失敗。