Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
database SQL di Azure
Istanza gestita di SQL di Azure
Azure Synapse Analytics
Data warehouse in Microsoft Fabric
Database SQL di Microsoft Fabric
L'utilità di copia bulk (bcp) copia in blocco i dati tra un'istanza di SQL Server e un file di dati in un formato specificato dall'utente.
Osservazioni:
Per informazioni su dove trovare o come eseguire l'utilità
bcpe sulle convenzioni sintattiche delle utilità del prompt dei comandi, consulta le utility da riga di comando SQL (motore di database).Per informazioni sulla preparazione dei dati per le operazioni di importazione o esportazione in blocco, vedere Preparare i dati per l'importazione o l'esportazione bulk.
Per informazioni sui casi in cui le operazioni di inserimento di righe eseguite durante l'importazione in blocco vengono registrate nel log delle transazioni, vedere Prerequisiti per la registrazione minima nell'importazione in blocco.
I caratteri
<,>,|&, e^sono caratteri speciali della shell dei comandi e devono essere preceduti dal carattere di escape (^) o racchiusi tra virgolette quando vengono usati in una stringa ,ad esempio"StringContaining&Symbol". Se si utilizzano le virgolette per racchiudere una stringa che contiene uno dei caratteri speciali, le virgolette sono impostate come parte del valore della variabile di ambiente. Per altre informazioni, vedere Uso di caratteri speciali aggiuntivi.bcpè attualmente in anteprima in Warehouse in Microsoft Fabric.bcpnon è possibile importare dati nell'endpoint di analisi SQL in Microsoft Fabric.
Supporto per file di dati nativi
In SQL Server, l'utility bcp supporta file di dati nativi compatibili con le versioni di SQL Server a partire da SQL Server 2000 (8.x) e successive.
Colonne calcolate e colonne di timestamp
I valori per le colonne calcolate o timestamp nel file di dati importato vengono ignorati e SQL Server assegna automaticamente nuovi valori. Se il file di dati non contiene valori per le colonne calcolate o timestamp della tabella, usare un file di formato per specificare che le colonne calcolate o timestamp della tabella dovranno essere ignorate durante l'importazione dei dati. I valori per la colonna verranno assegnati automaticamente da SQL Server.
Le colonne calcolate e timestamp sono copiate in massa da SQL Server a un file di dati con le modalità consuete.
Definizione di identificatori contenenti spazi o virgolette
Gli identificatori di SQL Server possono includere caratteri come spazi incorporati e virgolette. Tali identificatori possono essere utilizzati nei modi seguenti:
Quando al prompt dei comandi si specifica un identificatore o un nome di file che include uno spazio o una virgoletta singola, racchiuderlo tra virgolette doppie ("").
Il comando
bcp outseguente, ad esempio, consente di creare un file di dati denominatoCurrency Types.dat:bcp AdventureWorks2025.Sales.Currency out "Currency Types.dat" -T -cPer specificare un nome di database contenente uno spazio o una virgoletta singola, utilizzare l'opzione
-q.Per i nomi di proprietario, di tabella o di vista contenenti spazi incorporati o virgolette, è possibile effettuare le operazioni seguenti:
Specificare l'opzione
-qoppureRacchiudere il nome del proprietario, della tabella o della vista tra parentesi quadre (
[]) all'interno di virgolette.
Convalida dei dati
bcp ora impone la validazione dei dati e i controlli dei dati che possono causare fallimento degli script se incontrano dati non validi in un file dati. Ad esempio, bcp ora verifica che:
Validità delle rappresentazioni native dei tipi di dati float o real.
La lunghezza dei dati Unicode è costituita da un numero pari di byte.
Il caricamento di alcuni tipi di dati non validi di cui può essere eseguita l'importazione bulk nelle versioni precedenti di SQL Server può avere esito negativo in questa versione. Nelle versioni precedenti l'errore si verifica solo quando un client tenta di accedere ai dati non validi. La convalida aggiuntiva riduce la possibilità di sorprese durante l'esecuzione di query sui dati in seguito al caricamento in blocco.
Esportazione o importazione in massa di documenti SQLXML
Per l'esportazione o l'importazione bulk di dati SQLXML, utilizzare uno dei tipi di dati seguenti nel file di formato.
| Tipo di dati | Effetto |
|---|---|
SQLCHAR oppure SQLVARYCHAR |
I dati vengono inviati nella pagina di codice client o nella pagina di codice implicita dalla collazione. L'effetto equivale a quello ottenuto specificando l'opzione -c senza definire un file di formato. |
SQLNCHAR oppure SQLNVARCHAR |
I dati vengono inviati in formato Unicode. L'effetto equivale a quello ottenuto specificando l'opzione -w senza definire un file di formato. |
SQLBINARY oppure SQLVARYBIN |
I dati vengono inviati senza conversione. |
Procedure consigliate relative alla modalità carattere (-c) e alla modalità nativa (-n)
In questa sezione sono presenti indicazioni relative alla modalità carattere (-c) e alla modalità nativa (-n).
(Amministratore/utente) Quando possibile, utilizzare il formato nativo (
-n) per evitare i problemi relativi al separatore. Utilizzare il formato nativo per esportare e importare tramite SQL Server. Esportare dati da SQL Server usando l'opzione-co-wse si prevede di esportare i dati in un database non SQL Server.(Amministratore) Verificare i dati quando si usa
bcp out. Ad esempio, quando si usabcp out,bcp ine quindibcp outsi verifica che i dati vengano esportati correttamente e che i valori del carattere di terminazione non vengano usati come parte di alcuni valori di dati. Considerare di eseguire l'override dei caratteri di terminazione predefiniti (usando le opzioni-te-r) con valori esadecimali casuali per evitare conflitti tra i valori del carattere di terminazione e i valori dei dati.(Utente) Utilizzare un carattere di terminazione lungo e univoco (qualsiasi sequenza di byte o caratteri) per ridurre la possibilità di un conflitto con il valore stringa effettivo. Questa operazione può essere effettuata utilizzando le opzioni
-te-r.
Esempi
Gli esempi di codice in questo articolo usano sia il database di esempio AdventureWorks2025 sia il database di esempio WideWorldImporters. Per ulteriori informazioni consulta:
Per la sintassi per ripristinare i database di esempio, vedi RESTORE.
Condizioni di test di esempio
Salvo diversa specificazione, gli esempi presumono che tu usi l'autenticazione Windows e abbia una connessione affidabile all'istanza server su cui stai eseguendo il bcp comando. Molti degli esempi utilizzano una directory chiamata D:\bcp. Sostituire <server_name> e gli altri valori segnaposto con quelli dell'ambiente in uso.
Note
Gli esempi che si collegano a database SQL di Azure utilizzano l'autenticazione Microsoft Entra (-G). Per altre informazioni, vedere Eseguire l'autenticazione con Microsoft Entra ID in bcp.
Lo script di Transact-SQL seguente crea una copia vuota della WideWorldImporters.Warehouse.StockItemTransactions tabella e quindi aggiunge un vincolo di chiave primaria:
USE WideWorldImporters;
GO
SET NOCOUNT ON;
IF NOT EXISTS (SELECT *
FROM sys.tables
WHERE name = 'Warehouse.StockItemTransactions_bcp')
BEGIN
SELECT *
INTO WideWorldImporters.Warehouse.StockItemTransactions_bcp
FROM WideWorldImporters.Warehouse.StockItemTransactions
WHERE 1 = 2;
ALTER TABLE Warehouse.StockItemTransactions_bcp
ADD CONSTRAINT PK_Warehouse_StockItemTransactions_bcp
PRIMARY KEY NONCLUSTERED (StockItemTransactionID ASC);
END
È possibile troncare la tabella StockItemTransactions_bcp in base alle esigenze:
TRUNCATE TABLE WideWorldImporters.Warehouse.StockItemTransactions_bcp;
A. Identificare la versione dell'utilità bcp
Al prompt dei comandi immettere il comando seguente:
bcp -v
B. Copia le righe della tabella in un file di dati (con connessione attendibile)
Gli esempi seguenti mostrano l'opzione out sulla WideWorldImporters.Warehouse.StockItemTransactions tabella.
Basic
Questo esempio crea un file di dati denominato
StockItemTransactions_character.bcpin cui vengono copiati i dati della tabella usando il formato carattere .Al prompt dei comandi immettere il comando seguente:
bcp WideWorldImporters.Warehouse.StockItemTransactions out D:\bcp\StockItemTransactions_character.bcp -c -TExpanded
Questo esempio crea un file di dati denominato
StockItemTransactions_native.bcpin cui vengono copiati i dati della tabella usando il formato nativo . L'esempio inoltre: specifica il numero massimo di errori di sintassi, un file di errore e un file di output.Al prompt dei comandi immettere il comando seguente:
bcp WideWorldImporters.Warehouse.StockItemTransactions OUT D:\bcp\StockItemTransactions_native.bcp -m 1 -n -e D:\bcp\Error_out.log -o D:\bcp\Output_out.log -S <server_name> -T
Esaminare Error_out.log e Output_out.log.
Error_out.log deve essere vuoto. Confrontare le dimensioni dei file tra StockItemTransactions_character.bcp e StockItemTransactions_native.bcp.
C. Copia le righe di tabella in un file di dati (con autenticazione in modalità mista)
Il seguente esempio mostra l'opzione out sulla WideWorldImporters.Warehouse.StockItemTransactions tabella. Questo esempio crea un file di dati denominato StockItemTransactions_character.bcp in cui vengono copiati i dati della tabella usando il formato carattere .
Si presuppone che l'utente usi l'autenticazione in modalità mista e quindi l'opzione -U è necessaria per specificare l'ID di accesso. A meno che non venga eseguita la connessione all'istanza predefinita di SQL Server sul computer locale, usare l'opzione -S per specificare il nome di sistema e, facoltativamente, il nome di un'istanza.
Al prompt dei comandi, immettere il comando seguente (il sistema chiede di specificare la password):
bcp WideWorldImporters.Warehouse.StockItemTransactions out D:\bcp\StockItemTransactions_character.bcp -c -U<login_id> -S<server_name\instance_name>
D. Copia dati da un file a una tabella
Gli esempi seguenti mostrano l'opzione in sulla WideWorldImporters.Warehouse.StockItemTransactions_bcp tabella utilizzando i file creati in precedenza.
Basic
Questo esempio usa il file di dati
StockItemTransactions_character.bcpcreato in precedenza.Al prompt dei comandi immettere il comando seguente:
bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp IN D:\bcp\StockItemTransactions_character.bcp -c -TExpanded
Questo esempio usa il file di dati
StockItemTransactions_native.bcpcreato in precedenza. L'esempio usa anche l'hintTABLOCKe specifica le dimensioni del batch, il numero massimo di errori di sintassi, un file di errore e un file di output.Al prompt dei comandi immettere il comando seguente:
bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp IN D:\bcp\StockItemTransactions_native.bcp -b 5000 -h "TABLOCK" -m 1 -n -e D:\bcp\Error_in.log -o D:\bcp\Output_in.log -S <server_name> -TEsaminare
Error_in.logeOutput_in.log.
E. Copia una colonna specifica in un file di dati
Per copiare una colonna specifica, è possibile usare l'opzione queryout. Nell'esempio seguente viene copiata in un file di dati solo la colonna StockItemTransactionID della tabella Warehouse.StockItemTransactions .
Al prompt dei comandi immettere il comando seguente:
bcp "SELECT StockItemTransactionID FROM WideWorldImporters.Warehouse.StockItemTransactions WITH (NOLOCK)" queryout D:\bcp\StockItemTransactionID_c.bcp -c -T
F. Copia una riga specifica in un file di dati
Per copiare una riga specifica, è possibile usare l'opzione queryout. Nell'esempio seguente solo la riga dell'utente denominato Amy Trefl viene copiata dalla tabella WideWorldImporters.Application.People in un file di dati Amy_Trefl_c.bcp.
Note
L'opzione -d viene utilizzata per identificare il database.
Al prompt dei comandi immettere il comando seguente:
bcp "SELECT * from Application.People WHERE FullName = 'Amy Trefl'" queryout D:\bcp\Amy_Trefl_c.bcp -d WideWorldImporters -c -T
G. Copia dati da una query a un file di dati
Per copiare il set di risultati da un'istruzione Transact-SQL a un file di dati, usare l'opzione queryout. Nell'esempio seguente vengono copiati i nomi dalla tabella WideWorldImporters.Application.People nel file di dati People.txt , ordinandoli in base al nome completo.
Note
L'opzione -t viene usata per creare un file delimitato da virgole.
Al prompt dei comandi immettere il comando seguente:
bcp "SELECT FullName, PreferredName FROM WideWorldImporters.Application.People ORDER BY FullName" queryout D:\bcp\People.txt -t, -c -T
H. Creare file di formato
Nell'esempio seguente vengono creati tre diversi file di formato per la tabella Warehouse.StockItemTransactions nel database WideWorldImporters . Esaminare il contenuto di ogni file creato.
Al prompt dei comandi immettere i comandi seguenti:
REM non-XML character format
bcp WideWorldImporters.Warehouse.StockItemTransactions format nul -f D:\bcp\StockItemTransactions_c.fmt -c -T
REM non-XML native format
bcp WideWorldImporters.Warehouse.StockItemTransactions format nul -f D:\bcp\StockItemTransactions_n.fmt -n -T
REM XML character format
bcp WideWorldImporters.Warehouse.StockItemTransactions format nul -f D:\bcp\StockItemTransactions_c.xml -x -c -T
Note
L'opzione -x è supportata solo in Windows.
Per altre informazioni, vedere Usare file di formato non XML (SQL Server) e file di formato XML (SQL Server).For more information, see Use non-XML format files (SQL Server) and XML format files (SQL Server).
Io. Usare un file di formato per l'importazione in blocco con bcp
Per usare un file di formato creato in precedenza durante l'importazione di dati in un'istanza di SQL Server, specificare -f con l'opzione in. Il comando seguente, ad esempio, consente di eseguire la copia bulk del contenuto di un file di dati, StockItemTransactions_character.bcp, in una copia della tabella Warehouse.StockItemTransactions_bcp usando il file di formato creato in precedenza, StockItemTransactions_c.xml.
Note
L'opzione -L viene usata per importare solo i primi 100 record.
Al prompt dei comandi immettere il comando seguente:
bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp in D:\bcp\StockItemTransactions_character.bcp -L 100 -f D:\bcp\StockItemTransactions_c.xml -T
Note
I file di formato risultano particolarmente utili quando i campi dei file di dati sono diversi dalle colonne della tabella, ad esempio per numero, ordine o tipi di dati. Per altre informazioni, vedere Formattare i file per importare ed esportare i dati (SQL Server).
J. Specificare una pagina di codice
Il seguente esempio parziale di codice mostra bcp l'importazione mentre si specifica una pagina di codici 65001:
bcp MyTable in "D:\data.csv" -T -c -C 65001 -t , ...
Okay. File di output di esempio che utilizza un campo personalizzato e dei delimitatori di riga
Questo esempio mostra due file di esempio, generati utilizzando bcp terminatori di campo e righe personalizzati.
Creare una tabella
dbo.T1nel databasetempdbcon due colonne,IDeName.USE tempdb; GO CREATE TABLE dbo.T1 ( ID INT, [Name] NVARCHAR (20) ); GO INSERT INTO dbo.T1 VALUES (1, N'Natalia'); INSERT INTO dbo.T1 VALUES (2, N'Mark'); INSERT INTO dbo.T1 VALUES (3, N'Randolph'); GOGenerare un file di output dalla tabella di esempio
dbo.T1utilizzando un carattere di terminazione del campo personalizzato.In questo esempio specifica
-t ,il carattere di terminazione del campo personalizzato. Sostituire<server_name>con un valore per l'ambiente.bcp dbo.T1 out T1.txt -T -S <server_name> -d tempdb -w -t ,Il set di risultati è il seguente.
1,Natalia 2,Mark 3,RandolphGenerare un file di output dalla tabella di esempio
dbo.T1utilizzando un carattere di terminazione del campo e un carattere di terminazione riga personalizzati.In questo esempio,
-t ,specifica il carattere di terminazione del campo personalizzato e-r :specifica il carattere di terminazione della riga personalizzato. Sostituire<server_name>con un valore per l'ambiente.bcp dbo.T1 out T1.txt -T -S <server_name> -d tempdb -w -t , -r :Il set di risultati è il seguente.
1,Natalia:2,Mark:3,Randolph:Note
Il carattere di terminazione di riga viene sempre aggiunto, anche all'ultimo record. Tuttavia, il carattere di terminazione del campo non viene aggiunto all'ultimo campo.
L. Copia le righe della tabella in un file dati (database SQL di Azure)
Il seguente esempio mostra l'opzione out nella SalesLT.Customer tabella nel AdventureWorksLT database di esempio su database SQL di Azure. Questo esempio crea un file di dati denominato Customer.bcp in cui vengono copiati i dati della tabella usando il formato carattere . Sostituire <server_name> con un valore per l'ambiente.
Note
Lo -G switch consente l'autenticazione Microsoft Entra. Per altre informazioni, vedere Eseguire l'autenticazione con Microsoft Entra ID in bcp.
Al prompt dei comandi immettere il comando seguente:
bcp SalesLT.Customer out D:\bcp\Customer.bcp -c -S <server_name>.database.windows.net -d AdventureWorksLT -G
M. Copia dati da un file a una tabella (database SQL di Azure)
Il seguente esempio mostra l'opzione in nella SalesLT.Customer tabella in database SQL di Azure, utilizzando il Customer.bcp file dati che hai creato in precedenza. Sostituire <server_name> con un valore per l'ambiente.
Note
L'interruttore -E conserva i valori identità del file dati.
Al prompt dei comandi immettere il comando seguente:
bcp SalesLT.Customer in D:\bcp\Customer.bcp -c -S <server_name>.database.windows.net -d AdventureWorksLT -G -E
N. Copia dati da una query a un file di dati (database SQL di Azure)
Per copiare il set di risultati da un'istruzione Transact-SQL a un file dati su database SQL di Azure, usa l'opzionequeryout. Il seguente esempio copia i nomi dei clienti dalla SalesLT.Customer tabella nel AdventureWorksLT database nel Customer_A.txt file dati. Sostituire <server_name> con un valore per l'ambiente.
Note
Usa l'interruttore -t per creare un file delimitato da virgole.
Al prompt dei comandi immettere il comando seguente:
bcp "SELECT CustomerID, FirstName, LastName, CompanyName FROM SalesLT.Customer WHERE CompanyName LIKE 'A%'" queryout D:\bcp\Customer_A.txt -t, -c -S <server_name>.database.windows.net -d AdventureWorksLT -G
Esempi aggiuntivi
I seguenti articoli contengono esempi di utilizzo bcp:
Formati di dati per l'importazione o esportazione di massa (SQL Server)
Specificare i caratteri di terminazione dei campi e delle righe (SQL Server)
Mantenere i valori Null o i valori predefiniti durante un'importazione in blocco (SQL Server)
Mantenere i valori Identity durante l'importazione in blocco dei dati (SQL Server)
File di formato per l'importazione o l'esportazione di dati (SQL Server)
- Creazione di un file di formato con bcp (SQL Server)
- Usare un file di formato per l'importazione in blocco dei dati (SQL Server)
- Usare un file di formato per ignorare una colonna di una tabella (SQL Server)
- Usare un file di formato per escludere un campo dati (SQL Server)
- Usare un file di formato per eseguire il mapping tra le colonne di tabella e i campi del file di dati (SQL Server)
Esempi di importazione ed esportazione in blocco di documenti XML (SQL Server)
Contenuti correlati
- Preparare i dati per l'importazione o l'esportazione in blocco
- BULK INSERT (Transact-SQL)
- OPENROWSET (Transact-SQL)
- SET QUOTED_IDENTIFIER (Transact-SQL)
- sys.sp_configure (Transact-SQL)
- sys.sp_tableoption (Transact-SQL)
- Formattare i file per importare ed esportare i dati (SQL Server)
Ottieni aiuto
- Idee per SQL: sono disponibili suggerimenti per migliorare SQL Server?
- Domande e risposte Microsoft (SQL Server)
- DBA Stack Exchange (tag sql-server): fare domande su SQL Server
- Stack Overflow (tag sql-server): risposte a domande sullo sviluppo di SQL
- Informazioni e condizioni di licenza di Microsoft SQL Server
- Opzioni di supporto per utenti aziendali
- Ulteriore assistenza e feedback su SQL Server
Contribuire alla documentazione di SQL
Sei a conoscenza che puoi modificare tu stesso il contenuto SQL? In tal caso, non solo contribuisci a migliorare la documentazione, ma vieni anche riconosciuto come collaboratore della pagina.
Per altre informazioni, vedere Modifica la documentazione di Microsoft Learn.