Conversion de types de données (moteur de base de données)

Les types de données peuvent être convertis dans les scénarios suivants :

  • Lorsqu'elles sont déplacées dans, comparées à ou combinées avec les données d'un autre objet, 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.

  • Lorsque les données d'une colonne de résultats, d'un code de retour ou d'un paramètre de sortie Transact-SQL sont déplacées dans une variable de programme, elles doivent être converties du type de données système SQL Server vers le type de données de la 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 Server, les conversions de types de données acceptées sont définies par l'API de base de données.

Conversions implicites et explicites

Les types de données peuvent être convertis implicitement ou explicitement.

Les conversions implicites sont invisibles pour l'utilisateur. SQL Server convertit automatiquement les données d'un type de données en un autre. Par exemple, si un smallint est comparé à un int, le smallint est implicitement converti en int avant que la comparaison soit réalisée.

GETDATE() est converti implicitement en style de date 0. SYSDATETIME() est converti implicitement en style de date 21.

Les conversions explicites utilisent les fonctions CAST ou CONVERT.

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. Par exemple, la fonction CAST convertit la valeur numérique de $157.27 en une chaîne de caractères '157.27' :

CAST ( $157.27 AS VARCHAR(10) )

Utilisez CAST au lieu de CONVERT si vous souhaitez que le code de programmation Transact-SQL soit compatible avec la norme ISO. Utilisez la fonction CONVERT et non la fonction CAST pour bénéficier de la fonctionnalité style de la fonction 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 Server fournis par le système. Ceux-ci comprennent notamment xml, bigint et 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.

Table de conversion de type de données

Comportements de conversion de types de données

Lors de la conversion du type de données d'un objet SQL Server en un autre, certaines conversions de types de données implicites et explicites ne sont pas prises en charge. Ainsi, une valeur nchar ne peut pas être convertie en valeur image. Un nchar ne peut être converti en binary qu'en utilisant une conversion explicite, une conversion implicite en binary n'est pas acceptée. Cependant, un nchar peut être converti explicitement ou implicitement en nvarchar.

Les rubriques suivantes décrivent les comportements de conversion propres aux types de données correspondants :

binary et varbinary (Transact-SQL)

datetime2 (Transact-SQL)

money et smallmoney (Transact-SQL)

bit (Transact-SQL)

datetimeoffset (Transact-SQL)

smalldatetime (Transact-SQL)

char et varchar (Transact-SQL)

decimal et numeric (Transact-SQL)

sql_variant (Transact-SQL)

date (Transact-SQL)

float et real (Transact-SQL)

time (Transact-SQL)

datetime (Transact-SQL)

int, bigint, smallint et tinyint (Transact-SQL)

uniqueidentifier (Transact-SQL)

Conversion de types de données à l'aide des procédures stockées OLE Automation

Étant donné que SQL Server utilise les types de données Transact-SQL et que OLE Automation utilise les types de données Visual Basic, les procédures stockées OLE Automation doivent convertir les données qu'elles s'échangent.

Le tableau suivant décrit la conversion des types de données SQL Server en types de données Visual Basic.

Type de données SQL Server

Type de données Visual Basic

char, varchar, text, nvarchar, ntext

String

decimal, numeric

String

bit

Boolean

binary, varbinary, image

Tableau Byte() unidimensionnel

int

Long

smallint

Integer

tinyint

Byte

float

Double

real

Single

money, smallmoney

Currency

datetime, smalldatetime

Date

Tout type qui prend la valeur NULL

Variant ayant la valeur Null

Toutes les valeurs uniques de SQL Server sont converties en une valeur unique Visual Basic, à l'exception des valeurs binary, varbinary et image. Ces valeurs sont converties en tableau d'octets Byte() à une dimension dans Visual Basic. Ce tableau possède une plage de Byte(0 à length1), où length représente le nombre d'octets dans les valeurs binary, varbinary ou image de SQL Server.

Il s'agit des conversions des types de données Visual Basic en types de données SQL Server.

Type de données Visual Basic

Type de données SQL Server

Long, Integer, Byte, Boolean, Object

int

Double, Single

float

Currency

money

Date

datetime

String de 4 000 caractères maximum

varchar/nvarchar

String de plus de 4 000 caractères

text/ntext

Tableau de type Byte() à une dimension de 8 000 octets maximum

varbinary

Tableau de type Byte() à une dimension de plus de 8 000 octets

image

Voir aussi

Référence

Procédures stockées OLE Automation (Transact-SQL)

CAST et CONVERT (Transact-SQL)

Types de données (Transact-SQL)

COLLATE (Transact-SQL)