使用 bcp 將資料大量複製到 Linux 上的 SQL Server

適用於:SQL Server - Linux

此文章說明如何使用 bcp 公用程式,在 Linux 上的 SQL Server 的執行個體與使用者指定格式的資料檔案之間大量複製資料。

您可以使用 bcp 將大量資料列匯入 SQL Server 資料表中,或將 SQL Server 資料表的資料匯出至資料檔中。 除了搭配 queryout 選項使用之外,bcp 不需要任何 Transact-SQL 的知識。 bcp 命令列公用程式可搭配在內部部署或雲端中、於 Linux、Windows 或 Docker 上執行的 Microsoft SQL Server,以及 Azure SQL Database 和 Azure Synapse Analytics 使用。

本文示範如何:

  • 使用 bcp in 命令將資料匯入資料表
  • 使用 bcp out 命令從資料表匯出資料

安裝 SQL Server 命令列工具

bcp 是 SQL Server 命令列工具的一部分,這些工具不會隨 Linux 上的 SQL Server 自動安裝。 如果您尚未在 Linux 機器上安裝 SQL Server 命令列工具,您必須安裝它們。 如需有關如何安裝工具的詳細資訊,請從下列清單中選取您的 Linux 散發套件:

使用 bcp 匯入資料

在本教學課程中,您會在本機 SQL Server 執行個體 (localhost) 上建立範例資料庫和資料表,然後使用 bcp 從磁碟上的文字檔載入至範例資料表。

建立範例資料庫與資料表

讓我們從使用在本教學課程的其餘部分所使用的簡單資料表來建立範例資料庫開始。

  1. 在您的 Linux 方塊上,開啟命令終端機。

  2. 複製下列命令並貼到終端機視窗中。 這些命令會使用 sqlcmd 命令列公用程式,在本機 SQL Server 執行個體 (localhost) 上建立範例資料庫 (BcpSampleDB) 和資料表 (TestEmployees)。 請記得在執行命令之前,視需要取代 username<your_password>

建立資料庫 BcpSampleDB

sqlcmd -S localhost -U sa -P <your_password> -Q "CREATE DATABASE BcpSampleDB;"

在資料集 BcpSampleDB 中建立資料表 TestEmployees

sqlcmd -S localhost -U sa -P <your_password> -d BcpSampleDB -Q "CREATE TABLE TestEmployees (Id INT IDENTITY(1,1) NOT NULL PRIMARY KEY, Name NVARCHAR(50), Location NVARCHAR(50));"

建立來源資料檔案

複製下列命令並貼到您的終端機視窗中。 我們使用內建的 cat 命令來建立包含三筆記錄的範例文字資料檔案,並將檔案儲存在您的主目錄中 ~/test_data.txt。 記錄中的欄位會以逗號分隔。

cat > ~/test_data.txt << EOF
1,Jared,Australia
2,Nikita,India
3,Tom,Germany
EOF

您可以在終端機視窗中執行下列命令,以確認資料檔案已正確建立:

cat ~/test_data.txt

這應該會在您的終端機視窗中顯示下列內容:

1,Jared,Australia
2,Nikita,India
3,Tom,Germany

從來源資料檔案匯入資料

複製下列命令並貼到終端機視窗中。 此命令會使用 bcp 來連線至本機 SQL Server 執行個體 (localhost),並將資料從資料檔 (~/test_data.txt) 匯入到資料庫 (BcpSampleDB) 中的資料表 (TestEmployees)。 在執行命令之前,請記住視需要取代使用者名稱和 <your_password>

bcp TestEmployees in ~/test_data.txt -S localhost -U sa -P <your_password> -d BcpSampleDB -c -t  ','

以下簡要介紹我們在此範例中搭配 bcp 使用的命令列參數:

  • -S:指定要連線的 SQL Server 執行個體
  • -U:指定用來連接至 SQL Server 的登入識別碼
  • -P:指定登入識別碼的密碼
  • -d:指定要連線的資料庫
  • -c:利用字元資料類型來執行作業
  • -t:指定欄位結束字元。 我們會使用 comma 作為資料檔案中記錄的欄位結束字元

注意

在此範例中,我們不會指定自訂的資料列結束字元。 當我們稍早使用 cat 命令來建立資料檔案時,文字資料檔案中的資料列已正確地以 newline 終止。

您可以在終端機視窗中執行下列命令,以確認資料已成功匯入。 請記得在執行命令之前,視需要取代 username<your_password>

sqlcmd -S localhost -d BcpSampleDB -U sa -P <your_password> -I -Q "SELECT * FROM TestEmployees;"

這應該會顯示下列結果:

Id          Name                Location
----------- ------------------- -------------------
          1 Jared               Australia
          2 Nikita              India
          3 Tom                 Germany

使用 bcp 匯入資料

在本教學課程中,您會使用 bcp 從我們稍早建立的範例資料表中,將資料匯出到新的資料檔案。

複製下列命令並貼到終端機視窗中。 這些命令會使用 bcp 命令列公用程式,將資料從資料庫 BcpSampleDB 中的資料表 TestEmployees,匯出到名為 ~/test_export.txt 的新資料檔案。 在執行命令之前,請記住視需要取代使用者名稱和 <your_password>

bcp TestEmployees out ~/test_export.txt -S localhost -U sa -P <your_password> -d BcpSampleDB -c -t ','

您可以在終端機視窗中執行下列命令,以確認資料檔案已正確匯出:

cat ~/test_export.txt

這應該會在您的終端機視窗中顯示下列內容:

1,Jared,Australia
2,Nikita,India
3,Tom,Germany