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

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

Types de données représentant des valeurs numériques exactes qui utilisent des entiers.Exact-number data types that use integer data. Pour économiser de l’espace dans la base de données, utilisez le plus petit type de données qui peut contenir de manière fiable toutes les valeurs possibles.To save space in the database, use the smallest data type that can reliably contain all possible values. Par exemple, tinyint peut suffire pour l’âge d’une personne, car personne ne vit plus de 255 ans.For example, tinyint would be sufficient for a person's age because no one lives to be more than 255 years old. En revanche, tinyint ne serait pas suffisant pour dater un bâtiment, car il peut durer plus de 255 ans.But tinyint would not be sufficient for a building's age because a building can be more than 255 years old.

Type de donnéesData type PlageRange StockageStorage
bigintbigint -2^63 (-9 223 372 036 854 775 808) à 2^63-1 (9 223 372 036 854 775 807)-2^63 (-9,223,372,036,854,775,808) to 2^63-1 (9,223,372,036,854,775,807) Huit octets8 Bytes
Intint -2^31 (-2 147 483 648) à 2^31-1 (2 147 483 647)-2^31 (-2,147,483,648) to 2^31-1 (2,147,483,647) Quatre octets4 Bytes
smallintsmallint -2^15 (-32 768) à 2^15-1 (32 767)-2^15 (-32,768) to 2^15-1 (32,767) Deux octets2 Bytes
tinyinttinyint 0 à 2550 to 255 Un octet1 Byte

NotesRemarks

Le type de données int est le type de données integer principal dans SQL ServerSQL Server.The int data type is the primary integer data type in SQL ServerSQL Server. Le type de données bigint est destiné à être utilisé quand les valeurs entières sont susceptibles de ne pas appartenir à la plage prise en charge par le type de données int.The bigint data type is intended for use when integer values might exceed the range that is supported by the int data type.

bigint s’insère entre smallmoney et int dans le graphique de priorité des types de données.bigint fits between smallmoney and int in the data type precedence chart.

Les fonctions retournent bigint uniquement si l’expression de paramètre est un type de données bigint.Functions return bigint only if the parameter expression is a bigint data type. SQL ServerSQL Server ne promeut pas automatiquement les autres types de données integer (tinyint, smallint et int) en bigint.does not automatically promote other integer data types (tinyint, smallint, and int) to bigint.

Attention

Quand vous utilisez les opérateurs arithmétiques +, -, *, / ou % pour réaliser une conversion implicite ou explicite de valeurs constantes int, smallint, tinyint ou bigint en types de données float, real, decimal ou numeric, les règles appliquées par SQL ServerSQL Server pour calculer le type de données et la précision des résultats des expressions varient selon que la requête est automatiquement paramétrable ou non.When you use the +, -, *, /, or % arithmetic operators to perform implicit or explicit conversion of int, smallint, tinyint, or bigint constant values to the float, real, decimal or numeric data types, the rules that SQL ServerSQL Server applies when it calculates the data type and precision of the expression results differ depending on whether the query is autoparameterized or not.

Par conséquent, des expressions similaires dans les requêtes peuvent parfois produire des résultats différents.Therefore, similar expressions in queries can sometimes produce different results. Quand une requête n’est pas automatiquement paramétrable, la valeur constante est d’abord convertie en type de données numeric, dont la précision est juste suffisante pour contenir la valeur de la constante, avant la conversion dans le type de données spécifié.When a query is not autoparameterized, the constant value is first converted to numeric, whose precision is just large enough to hold the value of the constant, before converting to the specified data type. Par exemple, la valeur constante 1 est convertie en numeric (1, 0) et la valeur constante 250 est convertie en numeric (3, 0) .For example, the constant value 1 is converted to numeric (1, 0), and the constant value 250 is converted to numeric (3, 0).

Quand une requête est automatiquement paramétrable, la valeur constante est toujours convertie en numeric (10, 0) avant la conversion dans le type de données final.When a query is autoparameterized, the constant value is always converted to numeric (10, 0) before converting to the final data type. Lorsque l'opérateur / est impliqué, outre la précision du type de résultat, la valeur de résultat peut aussi différer parmi des requêtes similaires.When the / operator is involved, not only can the result type's precision differ among similar queries, but the result value can differ also. Par exemple, la valeur du résultat d’une requête automatiquement paramétrable qui comprend l’expression SELECT CAST (1.0 / 7 AS float) diffère de la valeur du résultat de la même requête non paramétrable automatiquement, car le résultat de la requête automatiquement paramétrable est tronqué afin qu’il puisse être contenu dans le type de données numeric (10, 0) .For example, the result value of an autoparameterized query that includes the expression SELECT CAST (1.0 / 7 AS float), differs from the result value of the same query that is not autoparameterized, because the results of the autoparameterized query, are truncated to fit into the numeric (10, 0) data type.

Conversion de données integerConverting integer data

Lorsque les entiers sont convertis implicitement en un type de données character, si l'entier est trop grand pour le champ de caractère, SQL ServerSQL Server affiche le caractère ASCII 42, l'astérisque (*).When integers are implicitly converted to a character data type, if the integer is too large to fit into the character field, SQL ServerSQL Server enters ASCII character 42, the asterisk (*).

Les constantes entières supérieures à 2 147 483 647 sont converties en type de données decimal, et non bigint.Integer constants greater than 2,147,483,647 are converted to the decimal data type, not the bigint data type. L’exemple suivant montre que, quand la valeur de seuil est dépassée, le type de données du résultat passe de int à decimal.The following example shows that when the threshold value is exceeded, the data type of the result changes from an int to a decimal.

SELECT 2147483647 / 2 AS Result1, 2147483649 / 2 AS Result2 ;  

Voici l'ensemble des résultats.Here is the result set.

Result1      Result2  
1073741823   1073741824.500000  

ExemplesExamples

L’exemple suivant crée une table à l’aide des types de données bigint, int, smallint et tinyint.The following example creates a table using the bigint, int, smallint, and tinyint data types. Les valeurs sont insérées dans chaque colonne et retournées dans l'instruction SELECT.Values are inserted into each column and returned in the SELECT statement.

CREATE TABLE dbo.MyTable  
(  
  MyBigIntColumn bigint  
,MyIntColumn  int
,MySmallIntColumn smallint
,MyTinyIntColumn tinyint
);  
  
GO  
  
INSERT INTO dbo.MyTable VALUES (9223372036854775807, 2147483647,32767,255);  
 GO  
SELECT MyBigIntColumn, MyIntColumn, MySmallIntColumn, MyTinyIntColumn  
FROM dbo.MyTable;  

Voici l'ensemble des résultats.Here is the result set.

MyBigIntColumn       MyIntColumn MySmallIntColumn MyTinyIntColumn  
-------------------- ----------- ---------------- ---------------  
9223372036854775807  2147483647  32767            255  
  
(1 row(s) affected)  

Voir aussiSee also

ALTER TABLE (Transact-SQL)ALTER TABLE (Transact-SQL)
CAST et CONVERT (Transact-SQL)CAST and CONVERT (Transact-SQL)
CREATE TABLE (Transact-SQL)CREATE TABLE (Transact-SQL)
DECLARE @local_variable (Transact-SQL)DECLARE @local_variable (Transact-SQL)
SET @local_variable (Transact-SQL)SET @local_variable (Transact-SQL)
sys.types (Transact-SQL)sys.types (Transact-SQL)