Eseguire una copia bulk dei dati con bcp in SQL Server in Linux

Si applica a: sìSQL Server (tutte le versioni supportate) - Linux

Questo articolo illustra come usare l'utilità della riga di comando bcp per eseguire una copia bulk dei dati tra un'istanza di SQL Server in Linux e un file di dati in un formato specificato dall'utente.

È possibile usare bcp per importare un numero elevato di righe in tabelle di SQL Server oppure per esportare dati da tabelle di SQL Server a file di dati. A eccezione del caso in cui venga usata con l'opzione queryout, bcp non richiede alcuna conoscenza di Transact-SQL. L'utilità della riga di comando bcp può essere usata con Microsoft SQL Server in esecuzione in locale o nel cloud, in Linux, Windows o Docker e nel database SQL di Azure e in Azure Synapse Analytics.

Questo articolo illustra come:

  • Importare i dati in una tabella usando il comando bcp in
  • Esportare i dati da una tabella usando il comando bcp out

Installare gli strumenti da riga di comando di SQL Server

bcp fa parte degli strumenti da riga di comando di SQL Server, che non vengono installati automaticamente con SQL Server in Linux. Se gli strumenti da riga di comando di SQL Server non sono già stati installati nel computer Linux, è necessario installarli. Per altre informazioni su come installare gli strumenti, selezionare la distribuzione di Linux dall'elenco seguente:

Importare i dati con bcp

In questa esercitazione si creano un database e una tabella di esempio nell'istanza di SQL Server locale (localhost) e quindi si usa bcp per caricare dati nella tabella di esempio da un file di testo su disco.

Creare un database e una tabella di esempio

Si inizierà con la creazione di un database di esempio con una semplice tabella usata nella parte restante di questa esercitazione.

  1. Nel computer Linux aprire un terminale di comando.

  2. Copiare e incollare i comandi seguenti nella finestra del terminale. Questi comandi usano l'utilità della riga di comando sqlcmd per creare un database di esempio (BcpSampleDB) e una tabella (TestEmployees) nell'istanza di SQL Server locale (localhost). Ricordarsi di sostituire username e <your_password>, se necessario, prima di eseguire i comandi.

Creare il database BcpSampleDB:

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

Creare la tabella TestEmployees nel database BcpSampleDB:

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));"

Creare il file di dati di origine

Copiare e incollare il comando seguente nella finestra del terminale. Si usa il comando cat predefinito per creare un file di dati di esempio con tre record. Salvare il file nella home directory come ~/test_data.txt. I campi nei record sono delimitati da una virgola.

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

È possibile verificare che il file di dati sia stato creato correttamente eseguendo il comando seguente nella finestra del terminale:

cat ~/test_data.txt

Nella finestra del terminale dovrebbe essere visualizzato quanto segue:

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

Importa i dati dal file di dati di origine

Copiare e incollare i comandi seguenti nella finestra del terminale. Questo comando usa bcp per connettersi all'istanza di SQL Server locale (localhost) e importare i dati dal file di dati ( ~/test_data.txt) nella tabella (TestEmployees) nel database (BcpSampleDB). Ricordarsi di sostituire il nome utente e <your_password>, se necessario, prima di eseguire i comandi.

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

Ecco una breve panoramica dei parametri della riga di comando usati con bcp in questo esempio:

  • -S: specifica l'istanza di SQL Server alla quale connettersi
  • -U: specifica l'ID di accesso usato per connettersi SQL Server
  • -P: specifica la password per l'ID di accesso
  • -d: specifica il database al quale connettersi
  • -c: esegue le operazioni usando un tipo di dati carattere
  • -t: specifica il carattere di terminazione del campo. Per i record nel file di dati viene usato comma come carattere di terminazione del campo

Nota

In questo esempio non viene specificato un carattere di terminazione della riga personalizzato. Le righe nel file di dati di testo sono state terminate correttamente con newline quando è stato usato il comando cat per creare il file di dati in precedenza.

È possibile verificare che i dati siano stati importati correttamente eseguendo il comando seguente nella finestra del terminale. Ricordarsi di sostituire username e <your_password>, se necessario, prima di eseguire il comando.

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

Verranno visualizzati i risultati seguenti:

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

(3 rows affected)

Esportare i dati con bcp

In questa esercitazione si usa bcp per esportare i dati dalla tabella di esempio creata in precedenza a un nuovo file di dati.

Copiare e incollare i comandi seguenti nella finestra del terminale. Questi comandi usano l'utilità della riga di comando bcp per esportare i dati dalla tabella TestEmployees nel database BcpSampleDB a un nuovo file di dati denominato ~/test_export.txt. Ricordarsi di sostituire il nome utente e <your_password>, se necessario, prima di eseguire il comando.

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

È possibile verificare che il file di dati sia stato esportato correttamente eseguendo il comando seguente nella finestra del terminale:

cat ~/test_export.txt

Nella finestra del terminale dovrebbe essere visualizzato quanto segue:

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

Vedere anche