Conversion de types de données (moteur de base de données)Data type conversion (Database Engine)

S’APPLIQUE À : ouiSQL Server ouiAzure SQL Database ouiAzure SQL Data Warehouse ouiParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Les types de données peuvent être convertis dans les scénarios suivants :Data types can be converted in the following scenarios:

  • Lorsque les données d'un objet sont déplacées dans les données d'un autre objet, sont comparées ou combinées à ces dernières, les données d'un objet doivent être converties du type de données d'un objet en type de données de l'autre.When data from one object is moved to, compared with, or combined with data from another object, the data may have to be converted from the data type of one object to the data type of the other.
  • Quand les données d’une colonne de résultats, d’un code de retour ou d’un paramètre de sortie Transact-SQLTransact-SQL sont déplacées dans une variable de programme, elles doivent être converties du type de données système SQL ServerSQL Server vers le type de données de la variable.When data from a Transact-SQLTransact-SQL result column, return code, or output parameter is moved into a program variable, the data must be converted from the SQL ServerSQL Server system data type to the data type of the variable.

Lors de la conversion entre une variable d'application et une colonne du jeu de résultats, un code de retour, un paramètre ou un marqueur de paramètre SQL ServerSQL Server, les conversions de types de données acceptées sont définies par l'API de base de données.When you convert between an application variable and a SQL ServerSQL Server result set column, return code, parameter, or parameter marker, the supported data type conversions are defined by the database API.

Conversions implicites et explicitesImplicit and explicit conversion

Les types de données peuvent être convertis implicitement ou explicitement.Data types can be converted either implicitly or explicitly.

Les conversions implicites sont invisibles pour l'utilisateur.Implicit conversions are not visible to the user. SQL ServerSQL Server convertit automatiquement les données d'un type de données en un autre.automatically converts the data from one data type to another. Par exemple, quand un smallint est comparé à un int, le smallint est implicitement converti en int avant de poursuivre la comparaison.For example, when a smallint is compared to an int, the smallint is implicitly converted to int before the comparison proceeds.

GETDATE() convertit implicitement la date en style 0.GETDATE() implicitly converts to date style 0. SYSDATETIME() convertit implicitement la date en style 21.SYSDATETIME() implicitly converts to date style 21.

Les conversions explicites utilisent les fonctions CAST ou CONVERT.Explicit conversions use the CAST or CONVERT functions.

Les fonctions CAST et CONVERT convertissent une valeur (une variable locale, une colonne ou une autre expression) d’un type de données en un autre.The CAST and CONVERT functions convert a value (a local variable, a column, or another expression) from one data type to another. Par exemple, la fonction CAST convertit la valeur numérique de $157.27 en une chaîne de caractères '157.27' :For example, the following CAST function converts the numeric value of $157.27 into a character string of '157.27':

CAST ( $157.27 AS VARCHAR(10) )  

Utilisez CAST au lieu de CONVERT si vous souhaitez que le code de programmation Transact-SQLTransact-SQL soit compatible avec la norme ISO.Use CAST instead of CONVERT if you want Transact-SQLTransact-SQL program code to comply with ISO. Utilisez la fonction CONVERT et non la fonction CAST pour bénéficier de la fonctionnalité style de la fonction CONVERT.Use CONVERT instead of CAST to take advantage of the style functionality in CONVERT.

L'illustration ci-dessous reprend toutes les conversions de types de données explicites et implicites autorisées pour les types de données SQL ServerSQL Server fournis par le système.The following illustration shows all explicit and implicit data type conversions that are allowed for SQL ServerSQL Server system-supplied data types. Ces types sont notamment xml, bigint et sql_variant.These include xml, bigint, and sql_variant. Aucune conversion implicite d’attribution de valeur n’est effectuée à partir du type de données sql_variant, mais une conversion implicite vers sql_variant existe.There is no implicit conversion on assignment from the sql_variant data type, but there is implicit conversion to sql_variant.

Table de conversion de types de donnéesData type conversion table

Le graphique ci-dessus illustre toutes les conversions implicites et explicites autorisées dans SQL Server, mais il n’indique pas le type de données résultant de la conversion.While the above chart illustrates all the explicit and implicit conversions that are allowed in SQL Server, it does not indicate the resulting data type of the conversion. Quand SQL Server effectue une conversion explicite, l’instruction elle-même détermine le type de données résultant.When SQL Server performs an explicit conversion, the statement itself determines the resulting data type. Pour les conversions implicites,ce sont les instructions d’assignation, comme la définition de la valeur d’une variable ou l’insertion d’une valeur dans une colonne, qui donnent le type de données défini par la déclaration de variable ou la définition de colonne.For implicit conversions, assignment statements such as setting the value of a variable or inserting a value into a column result in the data type that was defined by the variable declaration or column definition. Pour les opérateurs de comparaison ou d’autres expressions, le type de données résultant dépend des règles de priorité des types de données.For comparison operators or other expressions, the resulting data type depends on the rules of data type precedence.

Par exemple, le script suivant définit une variable de type varchar, assigne une valeur de type int à la variable, puis sélectionne une concaténation de la variable avec une chaîne.As an example, the following script defines a variable of type varchar, assigns an int type value to the variable, then selects a concatenation of the variable with a string.

DECLARE @string varchar(10);
SET @string = 1;
SELECT @string + ' is a string.'

La valeur int de 1 étant convertie en varchar, l’instruction SELECT retourne la valeur 1 is a string..The int value of 1 is converted to a varchar, so the SELECT statement returns the value 1 is a string..

L’exemple suivant illustre un script similaire avec à la place une variable int :The following example, shows a similar script with an int variable instead:

DECLARE @notastring int;
SET @notastring = '1';
SELECT @notastring + ' is not a string.'

Dans ce cas, l’instruction SELECT génère l’erreur suivante :In this case, the SELECT statement throws the following error:

Msg 245, Level 16, State 1, Line 3 Conversion failed when converting the varchar value ' is not a string.' to data type int.

Afin d’évaluer l’expression @notastring + ' is not a string.', SQL Server suit les règles de priorité des types de données pour effectuer la conversion implicite avant le calcul du résultat de l’expression.In order to evaluate the expression @notastring + ' is not a string.', SQL Server follows the rules of data type precedence to complete the implicit conversion before the result of the expression can be calculated. Étant donné que le type int a une priorité plus élevée que varchar, SQL Server tente de convertir la chaîne en entier et échoue parce que cette chaîne ne peut pas être convertie en entier.Because int has a higher precedence than varchar, SQL Server attempts to convert the string to an integer and fails because this string cannot be converted to an integer. Si l’expression fournit une chaîne pouvant être convertie, l’instruction réussit, comme dans l’exemple suivant :If the expression provides a string that can be converted, the statement succeeds, as in the following example:

DECLARE @notastring int;
SET @notastring = '1';
SELECT @notastring + '1'

La chaîne 1 pouvant être convertie en valeur entière 1 dans ce cas, l’instruction SELECT retourne la valeur 2.In this case, the string 1 can be converted to the integer value 1, so this SELECT statement returns the value 2. Notez que l’opérateur + devient une addition plutôt qu’une concaténation quand les types de données fournis sont des entiers.Note that the + operator becomes addition rather than concatenation when the data types provided are integers.

Comportements de conversion de types de donnéesData type conversion behaviors

Lors de la conversion du type de données d'un objet SQL ServerSQL Server en un autre, certaines conversions de types de données implicites et explicites ne sont pas prises en charge.Some implicit and explicit data type conversions are not supported when you are converting the data type of one SQL ServerSQL Server object to another. Ainsi, une valeur nchar ne peut pas être convertie en valeur image.For example, an nchar value cannot be converted to an image value. Une valeur nchar peut uniquement être convertie en binary avec une conversion explicite ; une conversion implicite en binary n’est pas prise en charge.An nchar can only be converted to binary by using explicit conversion, an implicit conversion to binary is not supported. Cependant, une valeur nchar peut être convertie explicitement ou implicitement en nvarchar.However, an nchar can be explicitly or implicitly converted to nvarchar.

Les rubriques suivantes décrivent les comportements de conversion propres aux types de données correspondants :The following topics describe the conversion behaviors exhibited by their corresponding data types:

Conversion de types de données à l'aide des procédures stockées OLE AutomationConverting Data Types by Using OLE Automation Stored Procedures

Étant donné que SQL ServerSQL Server utilise les types de données Transact-SQLTransact-SQL et qu'OLE Automation utilise les types de données Visual BasicVisual Basic, les procédures stockées OLE Automation doivent convertir les données qu'elles s'échangent.Because SQL ServerSQL Server uses Transact-SQLTransact-SQL data types and OLE Automation uses Visual BasicVisual Basic data types, the OLE Automation stored procedures must convert the data that passes between them.

Le tableau suivant décrit la conversion des types de données SQL ServerSQL Server en types de données Visual BasicVisual Basic.The following table describes SQL ServerSQL Server to Visual BasicVisual Basic data type conversions.

Type de données SQL ServerSQL Server data type Type de données Visual BasicVisual Basic data type
char, varchar, text, nvarchar, ntextchar, varchar, text, nvarchar, ntext StringString
decimal, numericdecimal, numeric StringString
bitbit BooléenBoolean
binary, varbinary, imagebinary, varbinary, image Tableau de type Byte() unidimensionnelOne-dimensional Byte() array
Intint LongLong
smallintsmallint IntegerInteger
tinyinttinyint ByteByte
floatfloat DoubleDouble
realreal UniqueSingle
money, smallmoneymoney, smallmoney Monétaire (Currency)Currency
datetime, smalldatetimedatetime, smalldatetime DateDate
Tout type qui prend la valeur NULLAnything set to NULL Variant ayant la valeur NullVariant set to Null

Toutes les valeurs uniques SQL ServerSQL Server sont converties en une valeur unique Visual BasicVisual Basic, à l’exception des valeurs binary, varbinary et image.All single SQL ServerSQL Server values are converted to a single Visual BasicVisual Basic value with the exception of binary, varbinary, and image values. Ces valeurs sont converties en tableau de type Byte() unidimensionnel dans Visual BasicVisual Basic.These values are converted to a one-dimensional Byte() array in Visual BasicVisual Basic. Ce tableau possède une plage Byte( 0 à length 1 )length représente le nombre d’octets dans les valeurs SQL ServerSQL Server binary, varbinary ou image.This array has a range of Byte( 0 to length 1 ) where length is the number of bytes in the SQL ServerSQL Server binary, varbinary, or image values.

Il s'agit des conversions des types de données Visual BasicVisual Basic en types de données SQL ServerSQL Server.These are the conversions from Visual BasicVisual Basic data types to SQL ServerSQL Server data types.

Type de données Visual BasicVisual Basic data type Type de données SQL ServerSQL Server data type
Long, Integer, Byte, Boolean, ObjectLong, Integer, Byte, Boolean, Object Intint
Double, SingleDouble, Single floatfloat
Monétaire (Currency)Currency moneymoney
DateDate datetimedatetime
String avec 4 000 caractères au maximumString with 4000 characters or less varchar/nvarcharvarchar/nvarchar
String avec plus de 4 000 caractèresString with more than 4000 characters text/ntexttext/ntext
Tableau de type Byte() unidimensionnel avec 8 000 octets au maximumOne-dimensional Byte() array with 8000 bytes or less varbinaryvarbinary
Tableau de type Byte() unidimensionnel avec plus de 8 000 octetsOne-dimensional Byte() array with more than 8000 bytes imageimage

Voir aussiSee also

Procédures stockées OLE Automation (Transact-SQL)OLE Automation Stored Procedures (Transact-SQL)
CAST et CONVERT (Transact-SQL)CAST and CONVERT (Transact-SQL)
Types de données (Transact-SQL)Data Types (Transact-SQL)
COLLATE (Transact-SQL)COLLATE (Transact-SQL)