Share via


Utilità bcp

L'utilità bcp consente di eseguire operazioni di copia bulk dei dati tra un'istanza di Microsoft SQL Server e un file di dati in un formato specificato dall'utente. L'utilità bcp può essere utilizzata per importare un numero elevato di nuove righe nelle tabelle di SQL Server o per esportare dati dalle tabelle in file di dati. Ad eccezione del caso in cui venga utilizzata con l'opzione queryout, l'utilità non richiede alcuna conoscenza di Transact-SQL. Per importare dati in una tabella, è necessario utilizzare un file di formato creato per la tabella specifica oppure conoscere approfonditamente la struttura della tabella e i tipi di dati validi per le relative colonne.

Icona di collegamento a un argomento Per informazioni sulle convenzioni utilizzate per la sintassi di bcp, vedere Convenzioni della sintassi Transact-SQL (Transact-SQL).

[!NOTA]

Se si utilizza bcp per eseguire il backup dei dati, creare un file di formato per registrare il formato di dati. I file di dati di bcp non includono alcuna informazione sullo schema o sul formato. Di conseguenza, se una tabella o una vista viene eliminata e non è disponibile un file di formato, l'utente potrebbe non essere in grado di importare i dati.

Sintassi

bcp [database_name.] schema.{table_name | view_name | "query" {in data_file | out data_file | queryout data_file | format nul}

   [-a packet_size]
   [-b batch_size]
   [-c]
   [-C { ACP | OEM | RAW | code_page } ]
   [-d database_name]
   [-e err_file]
   [-E]
   [-f format_file]
   [-F first_row]
   [-h"hint [,...n]"] 
   [-i input_file]
   [-k]
   [-K application_intent]
   [-L last_row]
   [-m max_errors]
   [-n]
   [-N]
   [-o output_file]
   [-P password]
   [-q]
   [-r row_term]
   [-R]
   [-S [server_name[\instance_name]]
   [-t field_term]
   [-T]
   [-U login_id]
   [-v]
   [-V (80 | 90 | 100 )]
   [-w]
   [-x]
   /?

Argomenti

  • data_file
    Percorso completo del file di dati. Quando si esegue un'importazione bulk dei dati in SQL Server, il file di dati include i dati da copiare nella tabella o nella vista specificata. Quando si esegue un'esportazione bulk dei dati da SQL Server, il file di dati include i dati copiati dalla tabella o dalla vista. Il percorso può essere costituito da un numero di caratteri compreso tra 1 e 255. Il file di dati può contenere un massimo di 263 - 1 righe.

  • database_name
    Nome del database in cui si trova la tabella o la vista specificata. Se tale valore non è specificato, il database è quello predefinito dell'utente.

    È inoltre possibile specificare in modo esplicito il nome del database tramite d-.

  • in data_file | outdata_file | queryoutdata_file | format nul
    Specifica la direzione della copia bulk nel modo seguente:

    • in esegue la copia da un file nella tabella o nella vista del database.

    • out esegue la copia dalla tabella o dalla vista del database in un file. Se si specifica un file esistente, il file viene sovrascritto. Durante l'estrazione dei dati, si noti che l'utilità bcp rappresenta una stringa vuota come Null e una stringa Null come stringa vuota.

    • queryout esegue la copia da una query e deve essere specificato solo in caso di copia bulk di dati da una query.

    • format crea un file di formato in base all'opzione specificata (-n, -c, -w o -N) e ai delimitatori della tabella o della vista. Durante la copia bulk dei dati, il comando bcp può fare riferimento a un file di formato, consentendo di evitare una nuova immissione delle informazioni sul formato in modo interattivo. L'opzione format richiede l'utilizzo dell'opzione -f. Se si crea un file di formato XML, sarà necessario specificare anche l'opzione -x. Per ulteriori informazioni, vedere Creazione di un file di formato (SQL Server). È necessario specificare nul come valore (format nul).

  • owner
    Nome del proprietario della tabella o della vista. owner è facoltativo se l'utente che esegue l'operazione è il proprietario della tabella o della vista specificata. Se owner non viene specificato e l'utente che esegue l'operazione non è il proprietario della tabella o della vista specificata, SQL Server restituisce un messaggio di errore e l'operazione viene annullata.

  • " query "
    Query Transact-SQL che restituisce un set di risultati. Se la query restituisce più set di risultati, nel file di dati viene copiato solo il primo set, mentre quelli successivi vengono ignorati. Racchiudere la query tra virgolette doppie e utilizzare le virgolette singole per altri elementi inclusi nella query. queryout deve essere specificato solo in caso di copia bulk di dati da una query.

    La query può fare riferimento a una stored procedure a condizione che tutte le tabelle cui viene fatto riferimento nella stored procedure siano disponibili prima dell'esecuzione dell'istruzione bcp. Se, ad esempio, la stored procedure genera una tabella temporanea, l'istruzione bcp non viene completata in modo corretto poiché tale tabella è disponibile solo in fase di esecuzione e non nel momento in cui viene eseguita l'istruzione. In questo caso, inserire i risultati della stored procedure in una tabella, quindi utilizzare bcp per copiare i dati dalla tabella in un file di dati.

  • table_name
    Nome della tabella di destinazione per l'importazione di dati in SQL Server (in) e della tabella di origine per l'esportazione di dati da SQL Server (out).

  • view_name
    Nome della vista di destinazione per la copia di dati in SQL Server (in) e della vista di origine per la copia di dati da SQL Server (out). È possibile utilizzare come viste di destinazione solo quelle in cui tutte le colonne fanno riferimento alla stessa tabella. Per ulteriori informazioni sulle restrizioni per la copia di dati nelle viste, vedere INSERT (Transact-SQL).

  • -a packet_size
    Specifica il numero di byte inviati al e dal server per ogni pacchetto di rete. È possibile impostare un'opzione di configurazione del server utilizzando SQL Server Management Studio o la stored procedure di sistema sp_configure. Questa opzione, tuttavia, ha la precedenza sull'opzione di configurazione del server. Il valore di packet_size può essere compreso tra 4096 e 65535 byte. Il valore predefinito è 4096.

    Le prestazioni delle operazioni di copia bulk migliorano con l'aumentare delle dimensioni del pacchetto. Se è richiesta una dimensione del pacchetto maggiore di quella consentita, viene utilizzato il valore predefinito. Le statistiche sulle prestazioni generate dall'utilità bcp indicano le dimensioni del pacchetto utilizzate.

  • -b batch_size
    Specifica il numero di righe per ogni batch di dati importati. Ogni batch viene importato e registrato come transazione distinta che importa l'intero batch prima del commit. Per impostazione predefinita, tutte le righe incluse nel file di dati vengono importate come un unico batch. Per distribuire le righe tra più batch, specificare un valore di batch_size inferiore al numero di righe presenti nel file di dati. Se la transazione per un batch non viene completata correttamente, viene eseguito il rollback solo degli inserimenti dal batch corrente. I batch già importati dalle transazioni di cui è stato eseguito il commit non sono influenzati in caso di esito negativo.

    Non utilizzare questa opzione in combinazione con l'opzione -h"ROWS_PER_BATCH = bb".

  • -c
    Esegue l'operazione utilizzando dati di tipo carattere. Con questa opzione non viene visualizzata una richiesta per ogni campo, ma viene utilizzato char come tipo di archiviazione, senza prefissi e con il carattere di tabulazione \t come separatore di campo e il carattere di nuova riga \r\n come carattere di terminazione della riga. -c non è compatibile con -w.

    Per ulteriori informazioni, vedere Utilizzo del formato carattere per l'importazione o l'esportazione di dati (SQL Server).

  • -C { ACP | OEM | RAW | code_page }
    Specifica la tabella codici dei dati contenuti nel file di dati. code_page è pertinente solo se i dati contengono colonne di tipo char, varchar o text con valori di carattere maggiori di 127 o minori di 32.

    [!NOTA]

    È consigliabile specificare un nome per le regole di confronto per ogni colonna in un file di formato.

    Valore tabella codici

    Descrizione

    ACP

    ANSI/Microsoft Windows (ISO 1252).

    OEM

    Tabella codici predefinita utilizzata dal client. Si tratta della tabella codici utilizzata per impostazione predefinita se non si specifica -C.

    RAW

    Non vengono eseguite conversioni tra tabelle codici. Per questo motivo, si tratta dell'opzione più rapida.

    code_page

    Numero di tabella codici specifico, ad esempio 850.

    Nota importanteImportante

    SQL Server non supporta la tabella codici 65001 (codifica UTF-8).

  • -d database_name
    Specifica il database al quale connettersi. Per impostazione predefinita, bcp.exe si connette al database predefinito dell'utente. Se si specificano -d database_name e un nome in tre parti (database_name.schema.table, passato come primo parametro a bcp.exe), verrà generato un errore in quanto non è possibile specificare il nome del database due volte. Se database_name inizia con un segno meno (-) o una barra (/), non aggiungere uno spazio tra -d e il nome del database.

  • -e err_file
    Specifica il percorso completo di un file di errori utilizzato per archiviare le eventuali righe che l'utilità bcp non è in grado di trasferire dal file al database. I messaggi di errore generati dal comando bcp vengono visualizzati nella workstation dell'utente. Se questa opzione non viene utilizzata, non viene creato alcun file degli errori.

    Se err_file inizia con un segno meno (-) o una barra (/), non includere uno spazio tra -e e il valore di err_file.

  • -E
    Specifica che il valore o i valori Identity presenti nel file di dati importato devono essere utilizzati per la colonna Identity. Se si omette l'opzione -E, i valori Identity della colonna nel file di dati da importare vengono ignorati e SQL Server assegna automaticamente valori univoci in base ai valori di inizializzazione e incremento specificati durante la creazione della tabella.

    Se il file di dati non contiene valori per la colonna Identity della tabella o della vista, utilizzare un file di formato per specificare che durante l'importazione di dati la colonna Identity della tabella o della vista deve essere ignorata. SQL Server assegna automaticamente valori univoci alla colonna. Per ulteriori informazioni, vedere DBCC CHECKIDENT (Transact-SQL).

    L'opzione -E è caratterizzata da requisiti di autorizzazione speciali. Per ulteriori informazioni, vedere la sezione "Osservazioni" di seguito in questo argomento.

  • -f format_file
    Specifica il percorso completo di un file di formato. Il significato di questa opzione dipende dall'ambiente in cui viene utilizzata, come descritto di seguito:

    • Se l'opzione -f viene utilizzata con l'opzione format, per la tabella o per la vista indicata verrà creato il file di formato format_file specificato. Per creare un file di formato XML, è inoltre necessario specificare l'opzione -x. Per ulteriori informazioni, vedere Creazione di un file di formato (SQL Server).

    • Se utilizzata con l'opzione in o out, l'opzione -f richiede un file di formato esistente.

      [!NOTA]

      L'utilizzo di un file di formato con l'opzione in o out è facoltativo. Se l'opzione -f viene omessa e non si specifica -n, -c, -w o -N, il comando richiede l'immissione di informazioni sul formato e consente di salvare le risposte in un file di formato, il cui nome predefinito è Bcp.fmt.

    Se format_file inizia con un segno meno (-) o una barra (/), non includere uno spazio tra -f e il valore di format_file.

  • -F first_row
    Specifica il numero della prima riga da esportare da una tabella o da importare da un file di dati. Per questo parametro è necessario specificare un valore maggiore di (>) 0, ma minore (<) o uguale (=) al numero totale di righe. Se il parametro viene omesso, l'impostazione predefinita è la prima riga del file.

    first_row può essere un numero intero positivo con valore massimo pari a 2^63-1. -F first_row è in base 1.

  • -h" hint[ ,... n] "
    Specifica gli hint da utilizzare per l'importazione bulk di dati in una tabella o in una vista.

    • ORDER**(column[ASC | DESC] [,...n])**
      Tipo di ordinamento dei dati nel file di dati. Le prestazioni dell'importazione bulk sono migliori se i dati da importare vengono ordinati in base all'indice cluster della tabella, se disponibile. Se il file di dati viene ordinato in modo diverso rispetto all'ordine di una chiave di indice cluster o se la tabella non include un indice cluster, la clausola ORDER viene ignorata. I nomi di colonna specificati devono corrispondere a nomi di colonna validi nella tabella di destinazione. Per impostazione predefinita, bcp presuppone che il file di dati non sia ordinato. Per garantire l'ottimizzazione dell'importazione bulk, in SQL Server viene inoltre verificato che i dati importati siano ordinati.

    • ROWS_PER_BATCH **=**bb
      Numero di righe di dati per batch (bb). Viene utilizzato quando non si specifica l'opzione -b e pertanto l'intero file di dati viene inviato al server come singola transazione. Il server ottimizza il caricamento bulk in base al valore bb. Per impostazione predefinita, il valore ROWS_PER_BATCH è sconosciuto.

    • KILOBYTES_PER_BATCH = cc
      Numero approssimativo di kilobyte di dati per batch (cc). Per impostazione predefinita, il valore KILOBYTES_PER_BATCH è sconosciuto.

    • TABLOCK
      Specifica che viene acquisito un blocco a livello di tabella per l'aggiornamento bulk per la durata dell'operazione di caricamento bulk. In caso contrario, viene acquisito un blocco di riga. Questo hint migliora significativamente le prestazioni, in quanto il mantenimento di un blocco per la durata dell'operazione di copia bulk riduce la contesa dei blocchi per la tabella. Una tabella può essere caricata simultaneamente da più client se non include indici e se si specifica TABLOCK. Per impostazione predefinita, la modalità di blocco è determinata dall'opzione table lock on bulk load della tabella.

    • CHECK_CONSTRAINTS
      Specifica che tutti i vincoli sulla tabella o sulla vista di destinazione devono essere controllati durante l'operazione di importazione bulk. Se non si specifica l'hint CHECK_CONSTRAINTS, i vincoli CHECK e FOREIGN KEY vengono ignorati e al termine dell'operazione il vincolo sulla tabella viene contrassegnato come non trusted.

      [!NOTA]

      I vincoli UNIQUE, PRIMARY KEY e NOT NULL vengono sempre applicati.

      In un determinato momento sarà necessario controllare i vincoli sull'intera tabella. Se prima dell'operazione di importazione bulk la tabella non è vuota, il costo per la riconvalida del vincolo potrebbe essere superiore a quello correlato all'applicazione dei vincoli CHECK ai dati incrementali. È pertanto consigliabile abilitare in genere il controllo dei vincoli durante un'importazione bulk incrementale.

      Una situazione in cui può essere necessario disabilitare i vincoli (comportamento predefinito) è rappresentata dal caso in cui i dati di input contengono righe che violano i vincoli. Se i vincoli CHECK sono disabilitati, è possibile importare i dati e quindi utilizzare le istruzioni Transact-SQL per rimuovere i dati non validi.

      [!NOTA]

      L'utilità bcp esegue ora la convalida e i controlli dei dati che potrebbero comportare la mancata esecuzione degli script quando questi ultimi vengono eseguiti su dati non validi inclusi in un file.

      [!NOTA]

      L'opzione -m max_errors non è valida per il controllo dei vincoli.

    • FIRE_TRIGGERS
      Se specificato insieme all'argomento in, determina l'esecuzione dei trigger di inserimento definiti nella tabella di destinazione durante l'operazione di copia bulk. Se non si specifica FIRE_TRIGGERS, non viene eseguito alcun trigger di inserimento. FIRE_TRIGGERS viene ignorato per gli argomenti out, queryout e format.

  • -i input_file
    Specifica il nome di un file di risposta contenente le risposte alle domande del prompt dei comandi per ogni campo dati quando si esegue una copia bulk in modalità interattiva, ovvero senza specificare l'opzione -n, -c, -w o -N.

    Se input_file inizia con un segno meno (-) o una barra (/), non includere uno spazio tra -i e il valore di input_file.

  • -k
    Specifica che durante l'operazione il valore delle colonne vuote deve essere Null, ovvero che non verranno inseriti valori predefiniti in tali colonne. Per ulteriori informazioni, vedere Mantenimento dei valori Null o utilizzo dei valori predefiniti durante un'importazione bulk (SQL Server).

  • -K application_intent
    Dichiara il tipo di carico di lavoro dell'applicazione in caso di connessione a un server. L'unico valore consentito è ReadOnly. Se l'opzione -K non è specificata, l'utilità bcp non supporterà la connettività a una replica secondaria in un gruppo di disponibilità AlwaysOn. Per ulteriori informazioni, vedere Repliche secondarie attive: Repliche secondarie leggibili (Gruppi di disponibilità AlwaysOn).

  • -L last_row
    Specifica il numero dell'ultima riga da esportare da una tabella o da importare da un file di dati. Per questo parametro è necessario specificare un valore maggiore di (>) 0, ma minore (<) o uguale (=) al numero dell'ultima riga. Se il parametro viene omesso, l'impostazione predefinita è l'ultima riga del file.

    last_row può essere un numero intero positivo con valore massimo pari a 2^63-1.

  • -m max_errors
    Specifica il numero massimo di errori di sintassi che possono verificarsi prima dell'annullamento dell'operazione bcp. Un errore di sintassi implica un errore di conversione dei dati nel tipo di dati di destinazione. Nel valore totale restituito da max_errors sono esclusi tutti gli errori che possono essere rilevati solo a livello del server, ad esempio le violazioni dei vincoli.

    Una riga che non può essere copiata dall'utilità bcp viene ignorata e conteggiata come errore. Se l'opzione viene omessa, il valore predefinito è 10.

    [!NOTA]

    L'opzione -m inoltre non è valida per la conversione dei tipi di dati money o bigint.

  • -n
    Esegue l'operazione di copia bulk utilizzando i tipi di dati nativi del database. Con questa opzione non viene visualizzata una richiesta per ogni campo, ma vengono utilizzati i valori nativi.

    Per ulteriori informazioni, vedere Utilizzo del formato nativo per importare o esportare dati (SQL Server).

  • -N
    Esegue l'operazione di copia bulk utilizzando i tipi di dati nativi del database per i dati non di tipo carattere e i caratteri Unicode per i dati di tipo carattere. Questa opzione rappresenta un'alternativa, con migliori prestazioni, all'opzione -w ed è destinata al trasferimento di dati tra istanze di SQL Server tramite un file di dati. Non viene visualizzata una richiesta per ogni campo. Utilizzare questa opzione per trasferire dati contenenti caratteri ANSI estesi se si desidera sfruttare le prestazioni della modalità nativa.

    Per ulteriori informazioni, vedere Utilizzare il formato Unicode nativo per importare o esportare dati (SQL Server).

    Se i dati vengono esportati e successivamente importati nello stesso schema della tabella tramite bcp.exe con -N, potrebbe venire visualizzato un avviso di troncamento qualora sia presente una colonna contenente caratteri non Unicode a lunghezza fissa, ad esempio char(10).

    L'avviso può essere ignorato. Per evitare la visualizzazione dell'avviso, utilizzare -n anziché -N.

  • -o output_file
    Specifica il nome di un file in cui viene reindirizzato l'output dal prompt dei comandi.

    Se output_file inizia con un segno meno (-) o una barra (/), non includere uno spazio tra -o e il valore di output_file.

  • -P password
    Specifica la password per l'ID di accesso. Se questa opzione non viene utilizzata, il comando bcp richiede una password. Se l'opzione viene specificata alla fine del prompt dei comandi senza indicare una password, bcp utilizza la password predefinita (NULL).

    Nota sulla sicurezzaNota sulla sicurezza

    Non utilizzare una password vuota. Utilizzare una password complessa.

    Per nascondere la password, non specificare l'opzione -P in combinazione con l'opzione -U. Dopo aver specificato il comando bcp con l'opzione -U e altre opzioni (senza specificare -P), premere INVIO. Verrà richiesto di immettere una password. Questo metodo garantisce che la password verrà nascosta durante l'immissione.

    Se password inizia con un segno meno (-) o una barra (/), non aggiungere uno spazio tra -P e il valore di password.

  • -q
    Esegue l'istruzione SET QUOTED_IDENTIFIERS ON durante la connessione tra l'utilità bcp e l'istanza di SQL Server. Questa opzione consente di specificare il nome di un database, di un proprietario, di una tabella o di una vista che include uno spazio o una virgoletta singola. Racchiudere tra virgolette doppie (" ") l'intero nome in tre parti della tabella o della vista.

    Per specificare il nome di un database che include uno spazio o una virgoletta singola, è necessario utilizzare l'opzione –q.

    -q non è applicabile ai valori passati a -d.

    Per ulteriori informazioni, vedere la sezione Osservazioni di seguito in questo argomento.

  • -r row_term
    Specifica il carattere di terminazione della riga. Il valore predefinito è \n (carattere di nuova riga). Utilizzare questo parametro per specificare un carattere di terminazione della riga diverso da quello predefinito. Per ulteriori informazioni, vedere Impostazione dei caratteri di terminazione del campo e della riga (SQL Server).

    Se si specifica il carattere di terminazione della riga in notazione esadecimale nel comando bcp.exe, il valore verrà troncato in corrispondenza di 0x00. Se ad esempio si specifica 0x410041, verrà utilizzato 0x41.

    Se row_term inizia con un segno meno (-) o una barra (/), non includere uno spazio tra -r e il valore di row_term.

  • -R
    Specifica che la copia bulk dei dati relativi a valuta, data e ora verrà eseguita in SQL Server utilizzando il formato definito per le impostazioni locali del computer client. Per impostazione predefinita, le impostazioni internazionali vengono ignorate.

  • -S server_name[ **\instance_name]
    Specifica l'istanza di SQL Server a cui connettersi. Se non si specifica alcun server, l'utilità bcp si connette all'istanza predefinita di SQL Server nel computer locale. È necessario specificare questa opzione se viene eseguito un comando bcp da un computer remoto in rete o in un'istanza denominata locale. Per connettersi all'istanza predefinita di SQL Server in un server, specificare solo server_name. Per connettersi a un'istanza denominata di SQL Server, specificare server_name
    \**instance_name.

  • -t field_term
    Specifica il carattere di terminazione del campo. Il valore predefinito è \t (carattere di tabulazione). Utilizzare questo parametro per specificare un carattere di terminazione del campo diverso da quello predefinito. Per ulteriori informazioni, vedere Impostazione dei caratteri di terminazione del campo e della riga (SQL Server).

    Se si specifica il carattere di terminazione del campo in notazione esadecimale nel comando bcp.exe, il valore verrà troncato in corrispondenza di 0x00. Se ad esempio si specifica 0x410041, verrà utilizzato 0x41.

    Se field_term inizia con un segno meno (-) o una barra (/), non includere uno spazio tra -t e il valore di field_term.

  • -T
    Specifica che l'utilità bcp si connette a SQL Server tramite una connessione trusted utilizzando la sicurezza integrata. Non è necessario specificare le credenziali di sicurezza dell'utente di rete, ovvero login_id e password. Se si omette –T, è necessario specificare –U e –P per eseguire correttamente l'accesso.

  • -U login_id
    Specifica l'ID di accesso utilizzato per connettersi a SQL Server.

    Nota sulla sicurezzaNota sulla sicurezza

    Quando l'utilità bcp si connette a SQL Server tramite una connessione trusted utilizzando la sicurezza integrata, utilizzare l'opzione -T (connessione trusted) invece della combinazione di user name e password.

  • -v
    Visualizza numero di versione e informazioni sul copyright per l'utilità bcp.

  • -V (80 | 90 | 100)
    Esegue l'operazione di copia bulk utilizzando i tipi di dati di una versione precedente di SQL Server. Con questa opzione non viene visualizzata una richiesta per ogni campo, ma vengono utilizzati i valori predefiniti.

    80 = SQL Server 2000

    90 = SQL Server 2005

    100 = SQL Server 2008 e SQL Server 2008 R2

    Per generare ad esempio dati per tipi non supportati in SQL Server 2000, ma introdotti in versioni successive di SQL Server, utilizzare l'opzione -V80.

    Per ulteriori informazioni, vedere Importare dati in formato nativo e carattere da versioni precedenti di SQL Server.

  • -w
    Esegue l'operazione di copia bulk utilizzando caratteri Unicode. Con questa opzione non viene visualizzata una richiesta per ogni campo, ma vengono utilizzati tipi nchar come tipo di archiviazione, il carattere di tabulazione \t come separatore dei campi e il carattere di nuova riga \n come carattere di terminazione della riga. Non viene utilizzato inoltre alcun prefisso. -w non è compatibile con -c.

    Per ulteriori informazioni, vedere Utilizzo del formato carattere Unicode per l'importazione o l'esportazione di dati (SQL Server).

  • -x
    Se utilizzato con le opzioni format e -f format_file, genera un file di formato basato su XML anziché un file di formato predefinito non XML. L'argomento -x non può essere utilizzato quando si esegue l'importazione o l'esportazione di dati. Se viene utilizzato senza format e -f format_file, viene generato un errore.

Osservazioni

Il client bcp 11.0 viene installato durante l'installazione degli strumenti di Microsoft SQL Server 2012. Se gli strumenti vengono installati sia per SQL Server 2012 che per una versione precedente di SQL Server, a seconda del valore della variabile di ambiente PATH è possibile che venga utilizzato il client bcp precedente anziché il client bcp 11.0. La variabile di ambiente definisce il set di directory utilizzato in Windows per la ricerca di file eseguibili. Per individuare la versione in uso, eseguire il comando bcp /v al prompt dei comandi di Windows. Per informazioni su come impostare il percorso di comando nella variabile di ambiente PATH, vedere la Guida di Windows.

I file di formato XML sono supportati solo quando gli strumenti di SQL Server vengono installati insieme a SQL Server Native Client.

Per informazioni sulla posizione e sulle modalità di esecuzione dell'utilità bcp e sulle convenzioni della sintassi per le utilità della riga di comando, vedere Guida di riferimento alle utilità del prompt dei comandi (motore di database).

Per informazioni sulla preparazione dei dati per le operazioni di importazione o esportazione bulk, vedere Preparazione dei dati per l'importazione o l'esportazione bulk (SQL Server).

Per informazioni sui casi in cui le operazioni di inserimento di righe effettuate durante l'importazione bulk vengono registrate nel log delle transazioni, vedere Prerequisiti per la registrazione minima nell'importazione bulk.

Supporto per file di dati nativi

In SQL Server 2012 l'utilità bcp supporta solo file di dati nativi compatibili con SQL Server 2000, SQL Server 2005, SQL Server 2008 e SQL Server 2008 R2.

Colonne calcolate e colonne 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, utilizzare 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 copie bulk di colonne calcolate e timestamp da SQL Server a un file di dati vengono eseguite con le modalità consuete.

Definizione di identificatori contenenti spazi o virgolette

Gli identificatori di SQL Server possono includere caratteri quali 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 out seguente, ad esempio, consente di creare un file di dati denominato Currency Types.dat:

    bcp AdventureWorks2012.Sales.Currency out "Currency Types.dat" -T -c
    
  • Per 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 singole, è possibile effettuare le operazioni seguenti:

    • Specificare l'opzione -q oppure

    • Racchiudere il nome del proprietario, della tabella o della vista tra parentesi quadre ([]) all'interno di virgolette.

Convalida dei dati

L'utilità bcp esegue ora la convalida e i controlli dei dati che potrebbero comportare la mancata esecuzione degli script quando questi ultimi vengono eseguiti su dati non validi inclusi in un file. L'utilità bcp, ad esempio, verifica quanto segue:

  • Validità della rappresentazione nativa dei tipi di dati float o real.

  • Lunghezza in byte pari dei dati Unicode.

Il caricamento di alcuni tipi di dati non validi di cui può essere eseguita l'importazione bulk nelle versioni precedenti di SQL Server potrebbe 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 il rischio di errori durante l'esecuzione di query sui dati in seguito al caricamento bulk.

Esportazione o importazione bulk 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 o SQLVARYCHAR

I dati vengono inviati nella tabella codici del client o nella tabella codici implicita delle regole di confronto. L'effetto equivale a quello ottenuto specificando l'opzione -c senza specificare un file di formato.

SQLNCHAR o 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 o SQLVARYBIN

I dati vengono inviati senza conversione.

Autorizzazioni

Un'operazione bcp out richiede l'autorizzazione SELECT per la tabella di origine.

Un'operazione bcp in richiede almeno l'autorizzazione SELECT/INSERT per la tabella di destinazione. È inoltre richiesta l'autorizzazione ALTER TABLE se si verifica uno dei casi seguenti:

  • Sono presenti alcuni vincoli e l'hint CHECK_CONSTRAINTS non è specificato.

    [!NOTA]

    Per impostazione predefinita, i vincoli sono disabilitati. Per abilitarli in modo esplicito, utilizzare l'opzione -h con l'hint CHECK_CONSTRAINTS.

  • Sono presenti alcuni trigger e l'hint FIRE_TRIGGER non è specificato.

    [!NOTA]

    Per impostazione predefinita, i trigger non sono attivati. Per attivarli in modo esplicito, utilizzare l'opzione -h con l'hint FIRE_TRIGGERS.

  • È possibile utilizzare l'opzione -E per importare valori Identity da un file di dati.

[!NOTA]

Il requisito relativo all'autorizzazione ALTER TABLE per la tabella di destinazione è una caratteristica introdotta in SQL Server 2005. Questo nuovo requisito potrebbe provocare la mancata esecuzione degli script bcp che non consentono l'applicazione di trigger e controlli dei vincoli se l'account utente non dispone delle autorizzazioni ALTER TABLE per la tabella di destinazione.

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. Se i dati saranno importati in un database non SQL Server, esportarli da SQL Server utilizzando l'opzione -c o -w.

  • (Amministratore) Verificare i dati in caso di utilizzo di BCP OUT. Ad esempio, quando si utilizza BCP OUT, BCP IN, quindi BCP OUT, verificare che i dati vengano esportati correttamente e che i valori del carattere di terminazione non siano utilizzati in alcuni valori di dati. Considerare di eseguire l'override dei caratteri di terminazione predefiniti (utilizzando le opzioni -t e -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 -t e -r.

Esempi

In questa sezione sono disponibili gli esempi seguenti:

  • A. Copia delle righe di tabella in un file di dati (con connessione trusted)

  • B. Copia delle righe di tabella in un file di dati (con autenticazione in modalità mista)

  • C. Copia di dati da un file a una tabella

  • D. Copia di una colonna specifica in un file di dati

  • E. Copia di una riga specifica in un file di dati

  • F. Copia di dati da una query a un file di dati

  • G. Creazione di un file di formato non XML

  • H. Creazione di un file di formato XML

  • I. Utilizzo di un file di formato per l'importazione bulk con bcp

A.Copia delle righe di tabella in un file di dati (con connessione trusted)

Nell'esempio seguente viene illustrato l'utilizzo dell'opzione out nella tabella AdventureWorks2012.Sales.Currency e viene creato un file di dati denominato Currency.dat in cui vengono copiati i dati della tabella utilizzando il formato carattere. Nell'esempio si presuppone l'utilizzo dell'autenticazione di Windows e la disponibilità di una connessione trusted all'istanza del server in cui si esegue il comando bcp.

Al prompt dei comandi immettere il comando seguente:

bcp AdventureWorks2012.Sales.Currency out Currency.dat -T -c

B.Copia delle righe di tabella in un file di dati (con autenticazione in modalità mista)

Nell'esempio seguente viene illustrato l'utilizzo dell'opzione out nella tabella AdventureWorks2012.Sales.Currency e viene creato un file di dati denominato Currency.dat in cui vengono copiati i dati della tabella utilizzando il formato carattere.

Nell'esempio si presuppone l'utilizzo dell'autenticazione in modalità mista. Per specificare l'ID di accesso, è necessario utilizzare l'opzione -U. A meno che non ci si connetta all'istanza predefinita di SQL Server nel computer locale, utilizzare inoltre l'opzione -S per specificare il nome del sistema e, facoltativamente, il nome di un'istanza.

bcp AdventureWorks2012.Sales.Currency out Currency.dat -c -U<login_id> -S<server_name\instance_name>

Verrà richiesto di inserire la password.

C.Copia di dati da un file a una tabella

Nell'esempio seguente viene illustrato l'utilizzo dell'opzione in con il file creato nell'esempio precedente (Currency.dat). Viene innanzitutto creata una copia vuota della tabella AdventureWorks2012 Sales.Currency, Sales.Currency2, in cui vengono copiati i dati. Nell'esempio si presuppone l'utilizzo dell'autenticazione di Windows e la disponibilità di una connessione trusted all'istanza del server in cui si esegue il comando bcp.

Per creare la tabella vuota, nell'editor di query immettere il comando seguente:

USE AdventureWorks2012;
GO
SELECT * INTO AdventureWorks2012.Sales.Currency2 
FROM AdventureWorks2012.Sales.Currency WHERE 1=2;

Per eseguire la copia bulk di dati di tipo carattere nella nuova tabella, ovvero per importare i dati, al prompt dei comandi immettere il comando seguente:

bcp AdventureWorks2012.Sales.Currency2 in Currency.dat -T -c

Per verificare la corretta esecuzione del comando, visualizzare il contenuto della tabella nell'editor di query e digitare:

USE AdventureWorks2012;
GO
SELECT * FROM Sales.Currency2

D.Copia di una colonna specifica in un file di dati

Per copiare una colonna specifica, è possibile utilizzare l'opzione queryout. Nell'esempio seguente viene copiata in un file di dati solo la colonna Name della tabella Sales.Currency. Nell'esempio si presuppone l'utilizzo dell'autenticazione di Windows e la disponibilità di una connessione trusted all'istanza del server in cui si esegue il comando bcp.

Al prompt dei comandi di Windows digitare:

bcp "SELECT Name FROM AdventureWorks.Sales.Currency" queryout Currency.Name.dat -T -c

E.Copia di una riga specifica in un file di dati

Per copiare una riga specifica, è possibile utilizzare l'opzione queryout. Nell'esempio seguente viene copiata solo la riga per il contatto denominato Jarrod Rana dalla tabella AdventureWorks2012.Person.Person in un file di dati (Jarrod Rana.dat).Nell'esempio si presuppone che si utilizzi l'autenticazione di Windows e che esista una connessione trusted all'istanza del server in cui viene eseguito il comando bcp.

Al prompt dei comandi di Windows digitare:

bcp "SELECT * FROM AdventureWorks2012.Person.Person WHERE FirstName='Jarrod' AND LastName='Rana' "  queryout "Jarrod Rana.dat" -T -c

F.Copia di 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, utilizzare l'opzione queryout. Nell'esempio seguente vengono copiati i nomi dalla tabella AdventureWorks2012.Person.Person nel file di dati Contacts.txt, ordinandoli in base al cognome e quindi al nome. Nell'esempio si presuppone l'utilizzo dell'autenticazione di Windows e la disponibilità di una connessione trusted all'istanza del server in cui si esegue il comando bcp.

Al prompt dei comandi di Windows digitare:

bcp "SELECT FirstName, LastName FROM AdventureWorks2012.Person.Person ORDER BY LastName, Firstname" queryout Contacts.txt -c -T

G.Creazione di un file di formato non XML

Nell'esempio seguente viene creato un file di formato non XML denominato Currency.fmt per la tabella Sales.Currency nel database AdventureWorks2012 . Nell'esempio si presuppone l'utilizzo dell'autenticazione di Windows e la disponibilità di una connessione trusted all'istanza del server in cui si esegue il comando bcp.

Al prompt dei comandi di Windows digitare:

bcp AdventureWorks2012.Sales.Currency format nul -T -c  -f Currency.fmt

Per ulteriori informazioni, vedere File in formato non XML (SQL Server).

H.Creazione di un file di formato XML

Nell'esempio seguente viene creato un file di formato XML denominato Currency.xml per la tabella Sales.Currency nel database AdventureWorks2012 . Nell'esempio si presuppone l'utilizzo dell'autenticazione di Windows e la disponibilità di una connessione trusted all'istanza del server in cui si esegue il comando bcp.

Al prompt dei comandi di Windows digitare:

bcp AdventureWorks2012.Sales.Currency format nul -T -c -x -f Currency.xml

[!NOTA]

Per utilizzare l'opzione -x, è necessario disporre di un client bcp 9.0. Per informazioni su come utilizzare il client bcp 9.0, vedere la sezione "Osservazioni".

Per ulteriori informazioni, vedere File in formato XML (SQL Server).

I.Utilizzo di un file di formato per l'importazione bulk con bcp

Per utilizzare un file di formato creato in precedenza per importare dati in un'istanza di SQL Server, utilizzare l'opzione -f con l'opzione in. Il comando seguente, ad esempio, consente di eseguire la copia bulk del contenuto di un file di dati denominato Currency.dat in una copia della tabella Sales.Currency (Sales.Currency2) utilizzando il file di formato creato in precedenza (Currency.xml). Nell'esempio si presuppone l'utilizzo dell'autenticazione di Windows e la disponibilità di una connessione trusted all'istanza del server in cui si esegue il comando bcp.

Al prompt dei comandi di Windows digitare:

bcp AdventureWorks2012.Sales.Currency2 in Currency.dat -T -f Currency.xml

[!NOTA]

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 ulteriori informazioni, vedere File di formato per l'importazione o l'esportazione di dati (SQL Server).

Esempi aggiuntivi

Negli argomenti seguenti sono inclusi altri esempi relativi all'utilizzo di bcp:

Vedere anche

Riferimento

BULK INSERT (Transact-SQL)

OPENROWSET (Transact-SQL)

SET QUOTED_IDENTIFIER (Transact-SQL)

sp_configure (Transact-SQL)

sp_tableoption (Transact-SQL)

Concetti

Preparazione dei dati per l'importazione o l'esportazione bulk (SQL Server)

File di formato per l'importazione o l'esportazione di dati (SQL Server)