bcp_control
Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW)
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 un'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. Il valore predefinito è 0, che indica tutte le righe di una tabella, quando i dati vengono estratti o tutte le righe nel file di dati utente, quando i dati vengono copiati in un'istanza di 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à anche un errore di sequenza se si chiama BCPDELAYREADFMT dopo aver chiamato bcp_control(hdbc,
bcp_control(hdbc,
BCPDELAYREADFMT, (void *)FALSE)
, (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 nel file si trovano nella 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 nel file si trovano nella 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 (10.0.x) o SQL Server 2008 R2 (10.50.x)), 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 dati ottenuti da una colonna di testo in un server SQL Server 2000 (8.x) in una colonna varchar(max) in un server SQL Server 2005 (9.x) o versione successiva, è necessario specificare 80. Analogamente, se si specifica 80 durante l'esportazione di dati da una colonna varchar(max), verrà salvata esattamente come le colonne di testo vengono salvate nel formato SQL Server 2000 (8.x) e possono essere importate in una colonna di testo di un server SQL Server 2000 (8.x).
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.
Si prevede 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 di formato XML sono supportati solo quando SQL Server viene installato insieme a SQL Server Native Client.
BCPHINTS
iValue contiene un puntatore di 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 di elaborazione della copia bulk, vedere Utilità bcp.
BCPKEEPIDENTITY
Quando iValue è TRUE, specifica che le funzioni di copia bulk inseriscono i valori dei dati forniti per le colonne di SQL Server 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 tabella di SQL Server. 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.
Si prevede 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 della sequenza di escape timestamp ODBC e il suffisso. L'opzione BCPODBC si applica solo a DB_OUT.
Se 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 è rappresentato da: {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'eOption specificato. 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.
Valori restituiti
SUCCEED o FAIL.
Osservazioni:
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 usata anche per specificare l'istruzione SELECT quando si esegue la copia bulk da SQL Server il set di risultati di un select. Impostare eOption su BCPHINTS e impostare iValue per avere un puntatore a una stringa SQLTCHAR contenente l'istruzione SELECT.
Questi parametri di controllo sono significativi solo quando si copia tra un file utente e una tabella di 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);