Importation de données au format natif et caractère à partir de versions antérieures de SQL Server
Pour utiliser bcp pour importer des données au format natif et caractère à partir de Microsoft SQL Server 2000 ou une version antérieure, utilisez le commutateur -V. Lorsque le commutateur -V est spécifié, Microsoft SQL Server 2005 utilise les types de données des versions précédentes de Microsoft SQL Server et le format du fichier de données sera identique à celui de cette version précédente.
Remarque : |
---|
Le commutateur -V étend la fonctionnalité du commutateur -6 utilisé dans Microsoft SQL Server 7.0. L'utilisation du commutateur -6 est identique à l'utilisation de -V60 ou -V65. Même si SQL Server prend toujours en charge le commutateur -6, cette méthode est désapprouvée. Par conséquent, l'utilisation de -V est recommandée. |
Pour spécifier si le fichier de données est au niveau d'une version précédente de SQL Server, utilisez le commutateur -V de la manière suivante :
Version de SQL Server | Identificateur |
---|---|
Microsoft SQL Server 6.0 |
-V60 |
Microsoft SQL Server 6.5 |
-V65 |
SQL Server 7.0 |
-V70 |
SQL Server 2000 |
-V80 |
Interprétation des types de données SQL Server 2005
SQL Server 2005 inclut une prise en charge supplémentaire pour certains nouveaux types. Pour importer un nouveau type de données de SQL Server 2005 dans SQL Server 2000 ou une version antérieure, il doit être stocké dans un format lisible par les clients bcp antérieurs. Le tableau ci-dessous résume le mode de conversion des nouveaux types de données de SQL Server 2005 pour assurer leur compatibilité avec les versions précédentes de SQL Server.
Nouveaux types de données dans SQL Server 2005 | Types de données compatibles dans la version 6x | Types de données compatibles dans la version 70 | Types de données compatibles dans la version 80 |
---|---|---|---|
bigint |
decimal |
decimal |
* |
sql_variant |
text |
nvarchar(4000) |
* |
varchar(max) |
text |
text |
text |
nvarchar(max) |
ntext |
ntext |
ntext |
varbinary(max) |
image |
image |
image |
XML |
ntext |
ntext |
ntext |
UDT1 |
image |
image |
image |
* Ce type est pris en charge en natif
1 UDT indique un type défini par l'utilisateur.
Exportation à partir de SQL Server 2005
Lorsque vous exportez des données en bloc à partir de SQL Server 2005 à l'aide du commutateur –V80, les données nvarchar(max), varchar(max), varbinary(max), XML et UDT en mode natif sont stockées avec un préfixe à 4 octets, comme les données text, image et ntext, et non avec un préfixe à 8 octets, qui est la valeur par défaut pour SQL Server 2005.
Exportation à partir de SQL Server 7.0 ou d'une version antérieure
Lors de l'exportation de données en bloc à partir de SQL Server 7.0 ou d'une version antérieure, tenez compte des éléments suivants :
- Le format de stockage des données bigint exporté à partir de SQL Server 7.0, SQL Server 6.5 ou SQL Server 6.0 dépend du format des données du fichier de données :
- Dans un fichier de données en mode natif ou au format natif Unicode, les données bigint sont stockées au format decimal(19,0).
- Dans un fichier de données en mode caractère ou au format de caractères Unicode, les données bigint sont stockées sous forme de chaîne de caractères ou Unicode de [-]digits, (par exemple, –25688904432).
- Pour une table contenant des colonnes char ou varchar, lors de l'exportation des données dans SQL Server 6.0 ou SQL Server 6.5, bcp ajoute un préfixe à 1 octet pour chaque champ du fichier de données équivalant à la longueur des données. Dans une table comportant des données numeric, les informations sont écrites dans le fichier de données au format natif SQL Server.
- Dans SQL Server 7.0 et SQL Server 2000, la valeur 0 représente une colonne de longueur nulle.
Exportation à partir de SQL Server 6.5 ou 6.0
En outre, lors de l'exportation de données en bloc à partir de SQL Server 6.5 ou SQL Server 6.0, tenez compte des éléments suivants :
- Dans SQL Server 6.5 ou les versions antérieures, l'utilitaire bcp représentait les valeurs NULL comme une valeur de longueur 0, alors que la valeur NULL est maintenant stockée comme une valeur de longueur -1.
- Les valeurs NULL des colonnes bit sont écrites sous la forme 0 car SQL Server 6.5 et les versions antérieures ne prennent pas en charge les données bit pouvant être de valeur NULL.
- L'utilitaire bcp ne génère pas de formats de date SQL Server 6.0 ou SQL Server 6.5 pour les données datetime ou smalldatetime. Les valeurs de dates doivent toujours être écrites au format ODBC.
- L'utilisation du commutateur -V 65 peut dégrader les performances du fait du calcul supplémentaire nécessaire à la prise en charge des conversions de dates multiples.
- Les valeurs des données sont différentes dans SQL Server 6.5 et les versions antérieures. Pour plus d'informations, consultez la section suivante intitulée « Copie de valeurs de date ».
Copie de valeurs de date
À partir de SQL Server 7.0, l'utilitaire bcp utilise l'API de copie en bloc ODBC. Par conséquent, pour importer des valeurs de date dans SQL Server 7.0 ou une version ultérieure, bcp utilise le format de date ODBC (yyyy-mm-dd hh:mm:ss[.f...]).
Au contraire, dans SQL Server 6.5 et les versions antérieures, l'utilitaire bcp utilise l'API de copie en bloc DB-Library et le format de date DB-Library. Pour exporter des formats de date dans SQL Server 7.0 et les versions ultérieures à partir de SQL Server 6.5 et des versions antérieures, utilisez le commutateur -V 65. Si vous spécifiez -V 65, la commande bcp tente tout d'abord de convertir la valeur de date dans le fichier de données à l'aide du format de date ODBC. En cas d'échec de la conversion, bcp tente de convertir la valeur de date à l'aide des formats DB-library.
Même si le paramètre -V 65 est spécifié, la commande bcp exporte toujours les fichiers de données au format caractère à l'aide du format ODBC par défaut pour les valeurs datetime et smalldatetime. Par exemple, une colonne datetime contenant la date 12 Aug 1998
est copiée en bloc dans un fichier de données en tant que chaîne de caractères 1998-08-12 00:00:00.000
.
Important : |
---|
Lors de l'importation de données dans un champ smalldatetime à l'aide de bcp, vérifiez que la valeur des secondes est 00.000 ; sinon, l'opération échouera. Le type de données smalldatetime ne conserve que les valeurs à la minute la plus proche. BULK INSERT et INSERT ... SELECT * FROM OPENROWSET(BULK...) n'échoueront pas dans ce cas, mais tronqueront la valeur des secondes. |
L'utilisation du commutateur -V65 peut dégrader les performances du fait du calcul supplémentaire nécessaire à la prise en charge des conversions de dates multiples.
Voir aussi
Concepts
Formats de date pour l'importation ou l'exportation de données
Autres ressources
Utilitaire bcp
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
Types de données (Transact-SQL)
Compatibilité descendante du moteur de base de données SQL Server 2005
CAST et CONVERT (Transact-SQL)