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

이 항목은 다음에 적용됩니다. 예SQL Server(2008부터)예Azure SQL Database예Azure SQL Data Warehouse 예병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

정수 데이터를 사용하는 정확한 숫자 데이터 형식입니다.Exact-number data types that use integer data. 데이터베이스의 공간을 절약하려면 가능한 모든 값을 안정적으로 포함할 수 있는 가장 작은 데이터 유형을 사용합니다.To save space in the database, use the smallest data type that can reliably contain all possible values. 예를 들어, tinyint는 255세 이상 사는 사람은 아무도 없기 때문에 사람의 나이에 충분합니다.For example, tinyint would be sufficient for a person's age because no one lives to be more than 255 years old. 그러나 tinyint는 건물 수명이 255년 이상 될 수 있기 때문에 건물 수명에는 충분하지 않습니다.But tinyint would not be sufficient for a building's age because a building can be more than 255 years old.

데이터 형식Data type 범위Range 저장소Storage
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) 8바이트8 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) 4바이트4 Bytes
smallintsmallint -2^15(-32,768) ~ 2^15-1(32,767)-2^15 (-32,768) to 2^15-1 (32,767) 2바이트2 Bytes
tinyinttinyint 0 ~ 2550 to 255 1바이트1 Byte

RemarksRemarks

int 데이터 형식은 SQL ServerSQL Server에서 주 정수 데이터 형식입니다.The int data type is the primary integer data type in SQL ServerSQL Server. bigint 데이터 형식은 정수 값이 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의 데이터 형식 우선 순위 위치는 smallmoneyint 사이입니다.bigint fits between smallmoney and int in the data type precedence chart.

함수는 매개 변수 식이 bigint 데이터 형식인 경우에만 bigint를 반환합니다.Functions return bigint only if the parameter expression is a bigint data type. SQL ServerSQL Server에서는 다른 정수 데이터 형식(tinyint, smallintint)을 자동으로 bigint로 승격시키지 않습니다. does not automatically promote other integer data types (tinyint, smallint, and int) to bigint.

주의

+, -, *, / 또는 % 산술 연산자를 사용하여 int, smallint, tinyint 또는 bigint 상수 값을 float, real, decimal 또는 numeric 데이터 형식으로 암시적 또는 명시적으로 변환하는 경우 SQL ServerSQL Server에서 데이터 형식과 식의 전체 자릿수를 계산할 때 적용하는 규칙은 쿼리에 자동으로 매개 변수가 지정되는지 여부에 따라 결과가 달라집니다.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.

그러므로 경우에 따라 쿼리의 비슷한 식이 다른 결과를 생성하기도 합니다.Therefore, similar expressions in queries can sometimes produce different results. 쿼리에 자동으로 매개 변수가 지정되지 않는 경우 상수 값은 먼저 전체 자릿수가 상수 값을 보유할 수 있을 만큼 큰 numeric으로 변환된 다음, 지정된 데이터 형식으로 변환됩니다.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. 예를 들어 상수 값 1은 numeric(1, 0) 으로 변환되고 상수 값 250은 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).

쿼리에 자동으로 매개 변수가 지정되는 경우 상수 값은 최종 데이터 형식으로 변환하기 전에 항상 numeric(10, 0) 으로 변환됩니다.When a query is autoparameterized, the constant value is always converted to numeric (10, 0) before converting to the final data type. / 연산자가 들어 있는 경우 비슷한 쿼리 간에 결과 형식의 전체 자릿수뿐만 아니라 결과 값도 달라질 수 있습니다.When the / operator is involved, not only can the result type's precision differ among similar queries, but the result value can differ also. 예를 들어 자동으로 매개 변수가 지정되며 SELECT CAST (1.0 / 7 AS float) 식이 포함된 쿼리의 결과 값은 자동으로 매개 변수가 지정되지 않는 동일한 쿼리의 결과 값과 달라집니다. 자동으로 매개 변수가 지정되는 쿼리의 결과는 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.

integer 데이터 변환Converting integer data

정수가 암시적으로 문자 데이터 형식으로 변환될 경우 정수가 너무 커서 문자 필드에 맞지 않으면 SQL ServerSQL Server는 ASCII 문자 42인 별표(*)를 입력합니다.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 (*).

2,147,483,647보다 큰 정수 상수는 decimal 데이터 형식이 아닌 bigint 데이터 형식으로 변환됩니다.Integer constants greater than 2,147,483,647 are converted to the decimal data type, not the bigint data type. 다음 예에서는 임계값을 초과할 때 데이터 형식이 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 ;  

결과 집합은 다음과 같습니다.Here is the result set.

Result1      Result2  
1073741823   1073741824.500000  

Examples

다음 예에서는 bigint, int, smallinttinyint 데이터 형식을 사용하여 테이블을 만듭니다.The following example creates a table using the bigint, int, smallint, and tinyint data types. 값은 각 열에 삽입되고 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;  

결과 집합은 다음과 같습니다.Here is the result set.

MyBigIntColumn       MyIntColumn MySmallIntColumn MyTinyIntColumn  
-------------------- ----------- ---------------- ---------------  
9223372036854775807  2147483647  32767            255  

(1 row(s) affected)  

관련 항목:See also

ALTER TABLE(Transact-SQL)ALTER TABLE (Transact-SQL)
CAST 및 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)