Partager via


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

  • dbc
    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 ou SQL Server 2008 R2). 100 est la valeur par défaut. 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.

    Notes

    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);

Voir aussi

Référence