Copie de données entre différents classements

Les données peuvent être déplacées de façon transparente entre des colonnes Unicode et la conversion n'est pas nécessaire. Les données déplacées entre les colonnes contenant des données de caractères non Unicode, cependant, doivent être converties de la page de codes source vers la page de codes cible. Une page de codes est un ensemble ordonné de caractères d'un script donné dans lequel un index numérique, ou valeur de point de code, est associé à chaque caractère. Les pages de codes prennent en charge les ensembles de caractères et les dispositions du clavier utilisés par différents paramètres régionaux Microsoft Windows. Pour obtenir la liste des pages de codes prises en charge, consultez Architecture des classements et des pages de codes.

Par défaut, les données de caractères sont converties de la manière suivante :

Opération Données de caractères converties en :

Exporter

Caractères de page de code OEM

Importer

Caractères de pages de code ANSI/Microsoft Windows.

La conversion entre les pages de code OEM et ANSI entraîne la perte des caractères étendus ou de jeu de caractères codés sur deux octets (DBCS). Pour éviter de telles conversions, vous pouvez spécifier une page de codes ou, pour Microsoft SQL Server version 7.0 ou ultérieure, un classement.

ms190657.note(fr-fr,SQL.90).gifRemarque :
Pour plus d'informations sur le transfert d'une base de données d'un classement à un autre, visitez ce site Web de Microsoft.

Introduit par SQL Server 7.0, le stockage physique des chaînes de caractères est contrôlé par les classements. Microsoft SQL Server 2005 prend en charge la définition de classements à quatre niveaux : l'instance de serveur, une base de données, une colonne de table et une expression. Un classement SQL Server spécifie trois propriétés :

  • La page de codes utilisée pour stocker les données de caractères non Unicode.
    ms190657.note(fr-fr,SQL.90).gifRemarque :
    Microsoft SQL Server version 6.5 et antérieure utilisaient les pages de code, mais ne les stockaient pas dans des classements.
  • L'ordre de tri à utiliser pour les types de données Unicode (nchar, nvarchar et ntext). L'ordre de tri définit l'ordre dans lequel les caractères sont triés, et la manière avec laquelle les caractères sont évalués dans les opérations de comparaison.
  • L'ordre de tri à utiliser pour les types de données de caractères non Unicode (char, varchar et text).

Pour une présentation des pages de code et des classements, consultez Options de classement et prise en charge internationale. Pour plus d'informations, consultez Utilisation des classements.

Utilisation d'un classement au niveau des colonnes

Dans SQL Server version 7.0 et ultérieure, vous pouvez contrôler la conversion des données en spécifiant le classement dans lequel les données sont stockées dans le champ du fichier de données cible, pour une exportation en bloc, ou dans la colonne de la table cible, pour une opération d'importation en bloc. Toutes les conversions nécessaires entre le classement du fichier de données et les classements des colonnes de la table dans la base de données sont effectuées en interne par l'opération d'importation et d'exportation.

ms190657.note(fr-fr,SQL.90).gifRemarque :
Pour contrôler la conversion des données d'une page de codes à une autre dans Microsoft SQL Server 6.0 ou Microsoft SQL Server 6.5, vous devez spécifier une page de codes en utilisant une option de page de codes (commutateur bcp-C ou l'option Transact-SQL CODEPAGE) dans la commande. Pour plus d'informations, consultez le paragraphe Utilisation d'une page de codes, ci-après dans cette rubrique. Pour SQL Server version 7.0 ou ultérieure, la spécification d'une page de codes est prise en charge, mais il est préférable de spécifier le classement dans un fichier de format.

Les classements s'appliquent toujours aux colonnes SQLCHAR dans les opérations d'importation en bloc et d'exportation en bloc. Les spécifications de classement de colonne sont toujours ignorées pour les colonnes pour lesquelles SQLCHAR ou SQLNCHAR n'est pas spécifié comme leur type de données hôte. Les classements sont utilisés pour déterminer l'ordre de tri des colonnes SQLCHAR et SQLNCHAR pendant des opérations d'importation en bloc pour lesquelles les colonnes sont référencées dans l'indicateur ORDER.

Pour spécifier le classement, vous devez utiliser un fichier de format. Les deux types de fichier de format prennent en charge la spécification des classements au niveau des colonnes. Pour plus d'informations sur l'utilisation des classements dans des fichiers de format non XML, consultez la section suivante, Spécification de classements au niveau des colonnes dans des fichiers de format non XML. Pour plus d'informations sur l'utilisation des classements dans des fichiers de format XML, consultez Description des fichiers de format XML.

Spécification de classements au niveau des colonnes dans des fichiers de format non XML

La colonne finale dans un fichier de format non XML (la colonne est en huitième position) contient une spécification de classement qui définit comment les données pour cette colonne sont stockées dans le fichier de données. Les options de colonne de classement sont les suivantes :

Option

Description

name

Spécifie le nom du classement utilisé pour stocker les données dans le fichier. Pour obtenir une liste des noms de classements SQL, consultez Nom du classement SQL (Transact-SQL).

RAW

Spécifie que les données sont stockées dans la page de codes spécifiée dans une option de page de codes dans la commande ou l'indicateur BCPFILECP de bcp_control. Si aucun de ces derniers n'est spécifié, le classement du fichier de données correspond à celui de la page de codes OEM de l'ordinateur client.

ms190657.note(fr-fr,SQL.90).gifRemarque :

Pour plus d'informations sur les options de page de codes, consultez le paragraphe Utilisation d'une page de codes, ci-après dans cette rubrique. Pour plus d'informations sur l'indicateur BCPFILECP, consultez bcp_control.

""

Possède une signification identique à RAW.

Exemples

L'exemple suivant illustre un fichier de format non XML avec des classements de colonnes spécifiés pour les champs 2 et 3. Les informations de colonne sont affichées en gras.

9.0
4
1       SQLCHAR       0       7       "\t"     1     DepartmentID     ""
2       SQLCHAR       0       100     "\t"     2     Name             SQL_Latin1_General_CP1_CI_AS
3       SQLCHAR       0       100     "\t"     3     GroupName        SQL_Latin1_General_CP1_CI_AS
4       SQLCHAR       0       24      "\r\n"   4     ModifiedDate     ""
ms190657.note(fr-fr,SQL.90).gifRemarque :
Le fichier de format précédent est destiné à la table HumanResources.Department dans la base de données exemple AdventureWorks, qui possède quatre colonnes : DepartmentID, Name, GroupName et ModifiedDate. Pour plus d'informations sur la table, consultez Table Department (AdventureWorks).

Pour plus d'informations sur les fichiers de format non XML, consultez Description des fichiers de format non XML.

Utilisation d'une page de codes

Pour contrôler la conversion des données d'une page de codes à une autre dans SQL Server 6.0 ou SQL Server 6.5, vous devez spécifier une page de codes dans la commande.

ms190657.note(fr-fr,SQL.90).gifRemarque :
Pour contrôler la conversion des données dans SQL Server version 7.0 ou ultérieure, Microsoft vous recommande d'utiliser un fichier de format pour spécifier les classements au niveau de la colonne pour une opération d'importation en bloc ou d'exportation en bloc. Pour plus d'informations, consultez Utilisation d'un classement au niveau des colonnes, à la section précédente.

La syntaxe pour la spécification d'une page de codes est la suivante :

  • Pour spécifier une page de codes dans une commande bcp, utilisez le commutateur -C :
    -C { ACP | OEM | RAW | code_page }
  • Pour spécifier une page de codes dans une instruction BULK INSERT ou INSERT ... SELECT * FROM OPENROWSET(BULK...), utilisez l'option CODEPAGE.
    CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' }

Le commutateur -C et l'option CODEPAGE acceptent les valeurs suivantes pour la page de codes.

Valeur de la page de codes Description

ACP

Pendant une opération d'importation, spécifie que les champs de données de type char, varchar ou text sont convertis de la page de codes ANSI/Windows (ISO 1252) vers la page de codes SQL Server.

Pendant une opération d'exportation, spécifie que bcp convertit ces colonnes de la page de codes SQL Server vers la page de codes ANSI/Windows.

OEM (valeur par défaut)

Pendant une opération d'importation, spécifie que les champs de données de type char, varchar ou text sont convertis de la page de codes OEM vers la page de codes SQL Server.

Pendant une opération d'exportation, spécifie que bcp convertit ces colonnes de la page de codes SQL Server vers la page de codes OEM.

RAW

Aucune conversion d'une page de codes vers une autre n'a lieu. Ceci correspond à l'option la plus rapide.

code_page

Un numéro de page de codes spécifique (par exemple 850). Pour obtenir la liste des pages de codes prises en charge, consultez Architecture des classements et des pages de codes.

Exemples

Les exemples suivants utilisent la table HumanResources.myTeam dans la base de données AdventureWorks. Avant de pouvoir exécuter ces exemples, vous devez créer cette table. Pour plus d'informations sur la table et la manière de la créer, consultez Création de la table HumanResources.myTeam.

ms190657.note(fr-fr,SQL.90).gifRemarque :
Avant de tester l'exemple suivant, vous devez supprimer les lignes existantes de la table myTeam pour éviter les conflits de clé primaire.

A. Utilisation d'une page de codes avec bcp

Cet exemple utilise la commande bcp pour l'exportation en bloc de données à partir de la table HumanResources.myTeam dans la base de données AdventureWorks vers le fichier de données myTeam850.txt, utilisant la page de codes 850. À l'invite de commandes Windows, entrez :

bcp AdventureWorks.HumanResources.myTeam out myTeam850.txt -c -C850 -T

B. Utilisation d'une page de codes avec BULK INSERT

Cet exemple utilise BULK INSERT pour l'importation en bloc de myTeam850.txt, créée dans l'exemple bcp précédent, dans la table HumanResources.myTeam de la base de données AdventureWorks.

À partir d'un outil de requête tel que l'Editeur de requête SQL Server Management Studio, exécutez :

USE AdventureWorks
GO
DELETE HumanResources.myTeam
GO
BULK INSERT HumanResources.myTeam 
   FROM 'C:\myTeam850.txt'
   WITH (CODEPAGE = 850);
GO

Exportation en bloc de données entre différents classements

Lors d'une opération d'exportation en bloc, la spécification de classement gère la page de codes utilisée pour stocker les données de caractères dans le fichier de données. Elle s'applique à :

  • toutes les colonnes dans un fichier de données au format caractères ;
  • toute colonne de fichier en mode natif où SQLCHAR est spécifié en tant que type de données de fichier hôte ;
  • tous les caractères SQLCHAR dont les valeurs sont supérieures à 127 ou inférieures à 32.
    Les classements sont appliqués aux caractères dont les valeurs sont comprises entre 32 et 127, mais toutes les pages de codes mappent les mêmes caractères aux valeurs allant de 32 à 127, par conséquent l'application de classements différents n'a aucun effet.

Les règles pour déterminer quel classement ou page de codes est utilisé sur une opération d'exportation en bloc sont les suivantes :

  • Si un classement de colonne est spécifié dans un format de fichier ou en utilisant la fonction ODBC bcp_setcolfmt (bcp_setcolfmt), les données de caractères sont stockées à l'aide de la page de codes ANSI associée au classement.
  • Si aucun classement de colonne n'a été spécifié, mais qu'une page de codes par défaut a été spécifiée à l'aide d'une option de page de codes dans la commande ou de l'indicateur BCPFILECP de bcp_control, toutes les données SQLCHAR provenant des colonnes sans spécification de classement de colonne sont stockées en utilisant la page de codes spécifiée.
    ms190657.note(fr-fr,SQL.90).gifRemarque :
    Pour plus d'informations sur les options de page de codes, consultez le paragraphe Utilisation d'une page de codes, ci-dessus dans cette rubrique. Pour plus d'informations sur l'indicateur BCPFILECP, consultez bcp_control.
  • Si vous ne spécifiez ni de classement ni de page de codes, les données SQLCHAR sont stockées à l'aide de la page de codes OEM de l'ordinateur client.
ms190657.note(fr-fr,SQL.90).gifRemarque :
Aucune information sur le classement/page de codes n'est stockée dans un fichier de données.

Importation en bloc de données entre différents classements

Pour une opération d'importation en bloc, l'interprétation de la page de codes s'applique aux colonnes stockées en tant que données au format de caractère SQLCHAR dans un fichier de données. Dans un fichier de données au format de caractère, toutes les colonnes sont stockées en tant que SQLCHAR. Aucune information sur le classement/page de codesn'étant stockée dans un fichier de données, pour une opération d'importation en bloc, vous devez fournir les informations sur le classement/page de codes des champs de données.

Les règles pour déterminer quel classement ou page de codes est utilisé sur une opération d'importation en bloc sont les suivantes :

  • Si vous spécifiez un classement de colonne dans un fichier de format ou en utilisant la fonction ODBC bcp_setcolfmt (bcp_setcolfmt), les données SQLCHAR dans un fichier de données sont interprétées à l'aide de la page de codes ANSI associée au classement de la colonne spécifié. Assurez-vous que vos spécifications de classement correspondent aux classements des fichiers de données.
  • Si aucun classement de colonne n'est spécifié, mais qu'une page de codes est spécifiée à l'aide d'une option de page de codes dans la commande ou l'indicateur BCPFILECP de bcp_control, les données SQLCHAR sont interprétées en utilisant la page de codes spécifiée.
    ms190657.note(fr-fr,SQL.90).gifRemarque :
    Pour plus d'informations sur les options de page de codes, consultez le paragraphe Utilisation d'une page de codes, ci-dessus dans cette rubrique. Pour plus d'informations sur l'indicateur BCPFILECP, consultez bcp_control.
  • Si vous ne spécifiez ni de classement ni de page de codes, les données des colonnes SQLCHAR sont interprétées à l'aide de la page de codes OEM de l'ordinateur client.

Lors d'une opération d'importation en bloc, la spécification de classement gère les éléments suivants :

  • La manière dont l'opération tente d'interpréter la page de codes des colonnes SQLCHAR dans le fichier de données.
  • Le mode d'application de l'indicateur ORDER par bcp ou BULK INSERT, le cas échéant.
    Si vous utilisez l'indicateur ORDER, l'opération d'importation en bloc utilise les classements pour l'interpréter correctement. Cet indicateur s'applique aux colonnes SQLCHAR et SQLNCHAR. Les données dans les colonnes référencées par l'indicateur ORDER doivent se trouver dans l'ordre défini par le classement mappé à ces colonnes. Pour plus d'informations, consultez Contrôle de l'ordre de tri lors de l'importation de données en bloc.

Voir aussi

Concepts

Utilisation du format caractère Unicode pour importer ou exporter des données
Utilisation du format natif Unicode pour importer ou exporter des données
Utilisation des classements

Autres ressources

bcp_control
Utilitaire bcp
bcp_setcolfmt
BULK INSERT (Transact-SQL)
Fichiers de format pour l'importation ou l'exportation de données
Considérations relatives à la prise en charge internationale des bases de données et des applications de moteur de base de données
OPENROWSET (Transact-SQL)

Aide et Informations

Assistance sur SQL Server 2005