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

Si applica a:SQL Server su Linux

Questo articolo illustra come usare l'utilità 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 SQL Server o per esportare dati da tabelle SQL Server in file di dati. Tranne quando viene usata con l'opzione queryout, bcp non richiede alcuna conoscenza di Transact-SQL. L'utilità bcp da riga di comando funziona con SQL Server che funziona on-premises o nel cloud su Linux, Windows o Docker, e con database SQL di Azure e 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 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 viene creato un database e una tabella di esempio nell'istanza di SQL Server locale (localhost) e quindi si usa bcp per caricare nella tabella di esempio da un file di testo su disco.

Creare un database e una tabella di esempio

Per iniziare, creare un database di esempio con una tabella semplice usata nel resto 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 utilizzano l'utilità sqlcmd per creare un database di esempio (BcpSampleDB) e una tabella (TestEmployees) sull'istanza locale di SQL Server (localhost). Ricordati di sostituire sa e <password> quando necessario prima di eseguire i comandi.

La password deve seguire la politica predefinita di SQL Server password. Per impostazione predefinita, la password deve essere composta da almeno otto caratteri e contenere caratteri di tre delle quattro categorie seguenti: lettere maiuscole, lettere minuscole, cifre in base 10 e simboli. Le password possono contenere fino a 128 caratteri. Usare password il più possibile lunghe e complesse.

Creare il database BcpSampleDB:

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

Creare la tabella TestEmployees nel database SQL BcpSampleDB:

sqlcmd -S localhost -U sa -P <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. Il comando integrato cat crea un file di dati di testo di esempio con tre record e salva il file nella tua cartella home 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

Copia e incolla il seguente comando nella finestra del terminale. Questo comando usa bcp per connettersi all'istanza SQL Server locale (localhost) e importare i dati dal file di dati (~/test_data.txt) nella tabella (TestEmployees) nel database (BcpSampleDB). Ricorda di sostituire sa e <password> quando necessario prima di eseguire il comando.

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

Ecco una breve panoramica dei parametri della riga di comando usati in bcp 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 operazioni utilizzando un tipo di dati di carattere
  • -t: specifica il carattere di terminazione del campo. Questo esempio utilizza una virgola come termine di campo per i record nel file dati

Note

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. Ricorda di sostituire sa e <password> quando necessario prima di eseguire il comando.

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

Verranno visualizzati i risultati seguenti:

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

Esportare i dati con bcp

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

Copia e incolla il seguente comando nella finestra del terminale. Questo comando utilizza l'utilità bcp della riga di comando per esportare i dati dalla tabella TestEmployees nel database BcpSampleDB a un nuovo file di dati chiamato ~/test_export.txt. Ricorda di sostituire sa e <password> quando necessario prima di eseguire il comando.

bcp TestEmployees out ~/test_export.txt -S localhost -U sa -P <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