bcp_control
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
Interrompe un'operazione di copia bulk già in corso. Chiamare bcp_control con eOption impostato su 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 reimposta BCPBATCH sul valore predefinito.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 70 (SQL Server 7.0), 80 (SQL Server 2000), 90 (SQL Server 2005) o 100 (SQL Server 2008). 100 è l'impostazione predefinita e indica che il file è in formato SQL Server 2008. Questa indicazione è utile per l'esportazione e l'importazione dei dati nei formati supportati dalla versione precedente del server. Per importare i dati ottenuti, ad esempio, da una colonna di testo di un server SQL Server 2000 in una colonna varchar(max) di un server SQL Server 2005 o versione successiva, è necessario specificare 80. Analogamente, se si specifica 80 quando si esportano dati da una colonna varchar(max), tali dati vengono salvati esattamente come vengono salvate le colonne di testo nel formato SQL Server 2000 e possono essere importati in una colonna di testo di un server SQL Server 2000.BCPFIRST
Indica la prima riga di dati del file o della tabella da copiare. Il valore predefinito è 1. Un valore inferiore a 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 corrisponda all'indirizzo di un numero intero a 64 bit con segno che contiene 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 alla 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 ulteriori informazioni sugli hint di elaborazione della copia bulk, vedere Utilità bcp.BCPKEEPIDENTITY
Quando iValue è impostato su TRUE, specifica che le funzioni di copia bulk inseriscono i valori di dati specificati per le colonne di SQL Server definite con un vincolo di identità. 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. Gli eventuali dati presenti nel file per le colonne di identità vengono ignorati.BCPKEEPNULLS
Specifica se i valori di dati vuoti nel file vengono convertiti in valori NULL nella tabella di SQL Server. Se iValue è impostato su TRUE, i valori vuoti vengono convertiti in valori NULL nella tabella di SQL Server. L'impostazione predefinita prevede che i valori vuoti vengano convertiti in un valore predefinito per la colonna nella tabella SQL Server, se tale valore esiste.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 corrisponda all'indirizzo di un numero intero a 64 bit con segno che contiene 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 inferiore a 1 reimposta l'opzione sul valore predefinito. La copia bulk impone un massimo di 65.535 errori. Il tentativo di impostare questa opzione su un valore superiore a 65.535 comporta l'impostazione dell'opzione su 65.535.BCPODBC
Quando è impostato su TRUE, specifica che i valori datetime e smalldatetime salvati in formato carattere utilizzeranno il prefisso e il suffisso della sequenza di escape del timestamp ODBC. L'opzione BCPODBC è applicabile solo a BCP_OUT.Quando è impostato su FALSE, un valore datetime che rappresenta il 1 gennaio 1997 viene convertito nella stringa di caratteri 1997-01-01 00:00:00.000. Quando è impostato su 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 l'indicatore 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'argomento eOption specificato. iValue è un valore integer (LONGLONG) con cast a un puntatore void per consentire l'espansione futura ai valori a 64 bit.
Restituisce
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 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 impostare iValue in modo da ottenere un puntatore a una stringa SQLTCHAR che contiene 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 influiscono 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);