bcp_control

Si applica a: sìSQL Server (tutte le versioni supportate) Sìdatabase SQL di Azure SìIstanza gestita di SQL di Azure sìAzure Synapse Analytics sìParallel Data Warehouse

Modifica le impostazioni predefinite per vari parametri di controllo per una copia bulk tra un file e SQL Server.

Sintassi

  
RETCODE bcp_control (  
        HDBC hdbc,  
        INT eOption,  
        void* iValue);  

Argomenti

hdbc
Handle di connessione ODBC abilitato per la copia bulk.

eOption
I valori validi sono i seguenti:

BCPABORT
Arresta un'operazione di copia bulk già in corso. Chiamare bcp_control con eOption di BCPABORT da un altro thread per arrestare un'operazione di copia bulk in esecuzione. Il parametro iValue viene ignorato.

BCPBATCH
Indica il numero di righe per batch. L'impostazione predefinita è 0 e indica tutte le righe di una tabella, quando i dati vengono estratti, o tutte le righe nel file di dati dell'utente, quando i dati vengono copiati in SQL Server. Un valore inferiore a 1 comporta la reimpostazione di BCPBATCH sul valore predefinito.

BCPDELAYREADFMT
Un valore booleano, se impostato su true, causerà bcp_readfmt lettura in fase di esecuzione. Se false (impostazione predefinita), bcp_readfmt leggerà immediatamente il file di formato. Si verificherà un errore di sequenza se BCPDELAYREADFMT è true e si chiama bcp_columns o bcp_setcolfmt.

Si verificherà un errore di sequenza anche se si chiama bcp_control(hdbc, BCPDELAYREADFMT dopo aver , (void *)FALSE) chiamato bcp_control(hdbc, BCPDELAYREADFMT , (void *)TRUE) e bcp_writefmt.

Per altre informazioni, vedere Metadata Discovery.

BCPFILECP
iValue contiene il numero della tabella codici per il file di dati. È possibile specificare il numero della tabella codici, ad esempio 1252 o 850, o uno dei valori indicati di seguito:

BCPFILE_ACP: i dati contenuti nel file utilizzano la tabella codici di Microsoft Windows® del client.

BCPFILE_OEMCP: i dati contenuti nel file utilizzano la tabella codici OEM del client (impostazione predefinita).

BCPFILE_RAW: i dati contenuti nel file utilizzano la tabella codici di SQL Server.

BCPFILEFMT
Numero di versione del formato del file di dati. Può essere 80 ( SQL Server 2000 (8.x) ), 90 ( SQL Server 2005 (9.x) ), 100 ( SQL Server 2008 o ), SQL Server 2008 R2 110 ( SQL Server 2012 (11.x) ) o 120 ( SQL Server 2014 (12.x) ). 120 è il valore predefinito. Questo valore è utile per l'esportazione e l'importazione di dati in formati supportati da una versione precedente del server. Ad esempio, per importare i dati ottenuti da una colonna di testo in un server in una colonna SQL Server 2000 (8.x) varchar(max) in un server o versioni successive, è necessario SQL Server 2005 (9.x) specificare 80. Analogamente, se si specifica 80 quando si esportano dati da una colonna varchar(max), questi verranno salvati esattamente come le colonne di testo vengono salvate nel formato e possono essere importate in una colonna di testo di SQL Server 2000 (8.x) un SQL Server 2000 (8.x) server.

BCPFIRST
Indica la prima riga di dati del file o della tabella da copiare. Il valore predefinito è 1. Un valore minore di 1 reimposta l'opzione sul valore predefinito.

BCPFIRSTEX
Per le operazioni BCP out, specifica la prima riga della tabella di database da copiare nel file di dati.

Per le operazioni BCP in, specifica la prima riga del file di dati da copiare nella tabella di database.

È previsto che il parametro iValue sia l'indirizzo di un intero con segno a 64 bit contenente il valore. Il valore massimo che è possibile passare a BCPFIRSTEX è 2^63-1.

BCPFMTXML
Specifica che il file di formato generato deve essere in formato XML. Per impostazione predefinita è disattivato.

I file in formato XML offrono una maggiore flessibilità sebbene con alcuni vincoli aggiuntivi. Diversamente dai file nei formati precedenti, non è ad esempio possibile specificare contemporaneamente il prefisso e il carattere di terminazione per un campo.

Nota

I file in formato XML sono supportati solo quando SQL Server viene installato insieme a SQL Server Native Client.

BCPHINTS
iValue contiene un puntatore a stringa di caratteri SQLTCHAR. Tale stringa specifica hint di elaborazione della copia bulk di SQL Server o un'istruzione Transact-SQL che restituisce un set di risultati. Se viene specificata un'istruzione Transact-SQL che restituisce più set di risultati, vengono ignorati tutti i set di risultati successivi al primo. Per altre informazioni sugli hint per l'elaborazione della copia bulk, vedere Utilità bcp.

BCPKEEPIDENTITY
Quando iValue è TRUE, specifica che le funzioni di copia bulk inseriscono i valori di dati forniti per le SQL Server colonne definite con un vincolo Identity. Il file di input deve fornire valori per le colonne di identità. Se questa impostazione non è disponibile, per le righe inserite vengono generati nuovi valori Identity. Eventuali dati presenti nel file per le colonne di identità vengono ignorati.

BCPKEEPNULLS
Specifica se i valori di dati vuoti nel file verranno convertiti in valori NULL nella tabella di SQL Server. Quando iValue è TRUE, i valori vuoti verranno convertiti in NULL nella SQL Server tabella. L'impostazione predefinita prevede che i valori vuoti vengano convertiti in un valore predefinito, se presente, per la colonna nella tabella di SQL Server.

BCPLAST
Indica l'ultima riga da copiare. Il valore predefinito prevede che vengano copiate tutte le righe. Un valore inferiore a 1 reimposta l'opzione sul valore predefinito.

BCPLASTEX
Per le operazioni BCP out, specifica l'ultima riga della tabella di database da copiare nel file di dati.

Per le operazioni BCP in, specifica l'ultima riga del file di dati da copiare nella tabella di database.

È previsto che il parametro iValue sia l'indirizzo di un intero con segno a 64 bit contenente il valore. Il valore massimo che è possibile passare a BCPLASTEX è 2^63-1.

BCPMAXERRS
Indica il numero massimo di errori che si possono verificare prima che l'operazione di copia bulk venga annullata. Il valore predefinito è 10. un valore minore di 1 reimposta questa opzione sul valore predefinito. La copia bulk impone un massimo di 65.535 errori. Il tentativo di impostare questa opzione su un valore maggiore di 65.535 comporta l'impostazione dell'opzione su 65.535.

BCPODBC
Se TRUE, specifica che i valori datetime e smalldatetime salvati in formato carattere useranno il prefisso e il suffisso della sequenza di escape del timestamp ODBC. L'opzione BCPODBC si applica solo DB_OUT.

Quando FALSE, un valore datetime che rappresenta il 1° gennaio 1997 viene convertito nella stringa di caratteri: 1997-01-01 00:00:00.000. Se TRUE, lo stesso valore datetime viene rappresentato come: {ts '1997-01-01 00:00:00.000'}.

BCPROWCOUNT
Restituisce il numero di righe interessate dall'ultima operazione BCP o da quella corrente.

BCPTEXTFILE
Quando è impostato su TRUE, specifica che il file di dati è un file di testo, anziché un file binario. Se il file è un file di testo, BCP determina se è Unicode controllando il marcatore di byte Unicode nei primi due byte del file di dati.

BCPUNICODEFILE
Quando è impostato su TRUE, specifica che il file di input è un file Unicode.

iValue
Valore per l'opzione eOption specificata. iValue è un valore integer (LONGLONG) di cui viene eseguito il cast a un puntatore void per consentire l'espansione futura a valori a 64 bit.

Restituisce

SUCCEED o FAIL.

Commenti

Questa funzione imposta vari parametri di controllo per le operazioni di copia bulk, inclusi il numero di errori consentito prima dell'annullamento di una copia bulk, i numeri della prima e dell'ultima riga da copiare da un file di dati e le dimensioni del batch.

Questa funzione viene utilizzata anche per specificare l'istruzione SELECT quando si esegue una copia bulk del set di risultati di un'istruzione SELECT da SQL Server. Impostare eOption su BCPHINTS e iValue in modo che abbia un puntatore a una stringa SQLTCHAR contenente l'istruzione SELECT.

Questi parametri di controllo sono significativi solo in caso di copia tra un file utente e una tabella SQL Server. Le impostazioni dei parametri di controllo non hanno alcun effetto sulle righe copiate in SQL Server con bcp_sendrow.

Esempio

// Variables like henv not specified.  
SQLHDBC      hdbc;  
DBINT      nRowsProcessed;  
  
// Application initiation, get an ODBC environment handle, allocate the  
// hdbc, and so on.  
...   
  
// Enable bulk copy prior to connecting on allocated hdbc.  
SQLSetConnectAttr(hdbc, SQL_COPT_SS_BCP, (SQLPOINTER) SQL_BCP_ON,  
   SQL_IS_INTEGER);  
  
// Connect to the data source, return on error.  
if (!SQL_SUCCEEDED(SQLConnect(hdbc, _T("myDSN"), SQL_NTS,  
   _T("myUser"), SQL_NTS, _T("myPwd"), SQL_NTS)))  
   {  
   // Raise error and return.  
   return;  
   }  
  
// Initialize bulk copy.   
if (bcp_init(hdbc, _T("address"), _T("address.add"), _T("addr.err"),  
   DB_IN) == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
  
// Set the number of rows per batch.   
if (bcp_control(hdbc, BCPBATCH, (void*) 1000) == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
  
// Set file column count.   
if (bcp_columns(hdbc, 1) == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
  
// Set the file format.   
if (bcp_colfmt(hdbc, 1, 0, 0, SQL_VARLEN_DATA, '\n', 1, 1)  
   == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
  
// Execute the bulk copy.   
if (bcp_exec(hdbc, &nRowsProcessed) == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
  
printf_s("%ld rows processed by bulk copy.", nRowsProcessed);  
  

Vedere anche

Funzioni di copia bulk