bcp_control
Modifie les paramètres par défaut pour différents paramètres de contrôle pour une copie en bloc entre un fichier et SQL Server.
Syntaxe
RETCODE bcp_control (
HDBC hdbc,
INT eOption,
void* iValue);
Arguments
hdbc
Handle de connexion ODBC compatible avec la copie en bloc.eOption
Prend l'une des valeurs suivantes :BCPABORT
Arrête une opération de copie en bloc déjà en cours. Appelez bcp_control avec eOption ayant pour valeur BCPABORT à partir d'un autre thread pour arrêter une opération de copie en bloc en cours d'exécution. Le paramètre iValue est ignoré.BCPBATCH
Nombre de lignes traitées par lot. La valeur par défaut est 0, ce qui indique soit que toutes les lignes sont dans une table, lorsque les données sont extraites, soit que toutes les lignes sont dans le fichiers des données utilisateur, lorsque les données sont copiées vers un serveur SQL Server. Une valeur inférieure à 1 rétablit la valeur par défaut de BCPBATCH.BCPFILECP
iValue contient le numéro de la page de codes pour le fichier de données. Vous pouvez spécifier le numéro de la page de codes, par exemple 1252 ou 850, ou l'une de ces valeurs :BCPFILE_ACP : les données dans le fichier figurent dans la page de codes Microsoft Windows® du client.
BCPFILE_OEMCP : les données dans le fichier figurent dans la page de codes OEM du client (valeur par défaut).
BCPFILE_RAW : les données dans le fichier figurent dans la page de codes du serveur SQL Server.
BCPFILEFMT
Numéro de version du format de fichier de données. Celui-ci peut être 70 (SQL Server 7.0), 80 (SQL Server 2000), 90 (SQL Server 2005) ou 100 (SQL Server 2008). La valeur par défaut est 100, ce qui indique que le fichier est au format SQL Server 2008. Cela s'avère utile pour exporter et importer des données dans des formats pris en charge par une version antérieure du serveur. Par exemple, pour importer des données obtenues à partir d'une colonne de texte d'un serveur SQL Server 2000 dans une colonne varchar(max) dans un serveur SQL Server 2005 ou ultérieur, vous devez spécifier 80. De la même façon, si vous spécifiez 80 lorsque vous exportez des données à partir d'une colonne varchar(max), celles-ci sont enregistrées de la même façon que les colonnes de texte (au format SQL Server 2000) et peuvent être importées dans une colonne de texte d'un serveur SQL Server 2000.BCPFIRST
Première ligne du fichier de données ou de la table à copier. La valeur par défaut est 1 ; une valeur inférieure à 1 rétablit la valeur par défaut de cette option.BCPFIRSTEX
Pour les opérations bcp out, spécifie la première ligne de la table de base de données à copier dans le fichier de données.Pour les opérations bcp in, spécifie la première ligne du fichier de données à copier dans la table de base de données.
Le paramètre iValue est censé être l'adresse d'un entier 64 bits signé contenant la valeur. La valeur maximale qui peut être passée à BCPFIRSTEX est 2^63-1.
BCPFMTXML
Spécifie que le fichier de format généré doit être au format XML. Il est désactivé par défaut.Les fichiers au format XML offrent plus de souplesse, mais aussi quelques contraintes supplémentaires. Par exemple, vous ne pouvez pas spécifier simultanément le préfixe et la terminaison pour un champ, ce qui était possible dans les fichiers de format plus anciens.
[!REMARQUE]
Les fichiers de format XML ne sont pris en charge que si SQL Server est installé conjointement avec SQL Server Native Client.
BCPHINTS
iValue contient un pointeur de chaîne de caractères SQLTCHAR. La chaîne adressée spécifie des indicateurs de traitement de copie en bloc SQL Server ou une instruction Transact-SQL qui retourne un jeu de résultats. Si une instruction Transact-SQL est spécifiée qui retourne plusieurs jeux de résultats, tous les jeux de résultats après le premier sont ignorés. Pour plus d'informations sur les indicateurs de traitement de copie en bloc, consultez Utilitaire bcp.BCPKEEPIDENTITY
Lorsque iValue a la valeur TRUE, spécifie que les fonctions de copie en bloc insèrent des valeurs de données fournies pour des colonnes SQL Server définies avec une contrainte d'identité. Le fichier d'entrée doit fournir des valeurs pour les colonnes d'identité. Si cela n'est pas défini, de nouvelles valeurs d'identités sont générées pour les lignes insérées. Toutes les données présentes dans le fichier pour les colonnes d'identité sont ignorées.BCPKEEPNULLS
Spécifie si les valeurs de données vides dans le fichier sont converties en valeurs NULL dans la table SQL Server. Lorsque iValue a la valeur TRUE, les valeurs vides sont converties en valeurs NULL dans la table SQL Server. L'option par défaut consiste à convertir les valeurs vides en une valeur par défaut pour la colonne dans la table SQL Server si une valeur par défaut existe.BCPLAST
Dernière ligne à copier. L'option par défaut consiste à copier toutes les lignes ; une valeur inférieure à 1 rétablit la valeur par défaut de cette option.BCPLASTEX
Pour les opérations bcp out, spécifie la dernière ligne de la table de base de données à copier dans le fichier de données.Pour les opérations bcp in, spécifie la dernière ligne du fichier de données à copier dans la table de base de données.
Le paramètre iValue est supposé être l'adresse d'un entier 64 bits signé contenant la valeur. La valeur maximale qui peut être passée à BCPLASTEX est 2^63-1.
BCPMAXERRS
Nombre d'erreurs autorisées avant l'échec de l'opération de copie en bloc. La valeur par défaut est 10 ; une valeur inférieure à 1 rétablit la valeur par défaut de cette option. La copie en bloc impose 65 535 erreurs au maximum. Toute tentative d'attribution d'une valeur supérieure à 65 535 à cette option entraîne l'attribution de la valeur 65 535 à l'option.BCPODBC
Lorsque la valeur est TRUE, spécifie que les valeurs datetime et smalldatetime enregistrées au format caractère utilisent le préfixe et le suffixe de séquence d'échappement d'horodateur ODBC. L'option BCPODBC s'applique uniquement à BCP_OUT.Lorsque la valeur est FALSE, une valeur datetime qui représente le 1er janvier 1997 est convertie en chaîne de caractères : 1997-01-01 00:00:00.000. Lorsque la valeur est TRUE, la même valeur datetime est représentée comme suit : {ts '1997-01-01 00:00:00.000'}.
BCPROWCOUNT
Retourne le nombre de lignes affectées par l'opération BCP en cours (ou la dernière).BCPTEXTFILE
Lorsque la valeur est TRUE, spécifie que le fichier de données est un fichier texte et non un fichier binaire. Si le fichier est un fichier texte, BCP détermine s'il est ou non un fichier Unicode en vérifiant le marqueur d'octet Unicode dans les deux premiers octets du fichier de données.BCPUNICODEFILE
Lorsque la valeur est TRUE, spécifie que le fichier d'entrée est un fichier Unicode.iValue
Valeur pour le paramètre eOption spécifié. L'argument iValue est un cast de valeur entière (LONGLONG) à un pointeur void pour autoriser l'expansion future vers des valeurs 64 bits.
Valeurs retournées
SUCCEED ou FAIL.
Notes
Cette fonction définit différents paramètres de contrôle pour les opérations de copie en bloc, y compris le nombre d'erreurs autorisées avant l'annulation de la copie en bloc, les numéros des première et dernière lignes à copier à partir d'un fichier de données, et la taille du lot.
Cette fonction est également utilisée pour spécifier l'instruction SELECT lors de la copie en bloc à partir du jeu de résultats SQL Server d'une instruction SELECT. Attribuez à eOption la valeur BCPHINTS et définissez iValue de manière à avoir un pointeur vers une chaîne SQLTCHAR contenant l'instruction SELECT.
Ces paramètres de contrôle ne sont explicites qu'en cas de copie entre un fichier utilisateur et une table SQL Server. Les paramètres de contrôle n'ont aucun effet sur les lignes copiées vers SQL Server avec bcp_sendrow.
Exemple
// 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);