Articles

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

  • 09/08/2017
  • 3 minutes to read
    • M
    • j
    • c
    • M
    • i
    • +8

Applies to: はいSQL Server(すべてのサポートされているバージョン)はいAzure SQLデータベースはいAzure SQLマネージインスタンスはいAzure Synapse Analyticsはい並列データウェアハウス

整数データを使用する正確な数値データ型。 データベース内の領域を節約するには、すべての可能な値を確実に格納できる最小のデータ型を使用します。 たとえば、tinyintは、255歳以上の人が住んでいないため、人の年齢には十分です。 しかし、建物は255歳以上になる可能性があるため、tinyintは建物の年齢には十分ではありません。

Data type Range Storage
bigint -2^63 (-9,223,372,036,854,775,808) to 2^63-1 (9,223,372,036,854,775,807) 8 Bytes
int -2^31 (-2,147,483,648) to 2^31-1 (2,147,483,647) 4 Bytes
smallint -2^15 (-32,768) to 2^15-1 (32,767) 2 Bytes
tinyint 0 to 255 1 Byte

備考

intデータ型は、SQL Serverのプライマリ整数データ型です。 Bigintデータ型は、整数値がintデータ型でサポートされている範囲を超える可能性がある場合に使用することを目的としています。

bigintは、データ型の優先順位チャートでsmallmoneyとintの間に収まります。

関数は、パラメーター式がbigintデータ型の場合にのみbigintを返します。 SQL Serverでは、他の整数データ型(tinyint、smallint、およびint)がbigintに自動的に昇格されることはありません。

注意

算術演算子+、-、*、/、または%を使用して、int、smallint、tinyint、またはbigint定数値をfloat、real、decimal、またはnumericデータ型に暗黙的または明示的に変換する場合、SQL Serverが式の結果のデータ型と精度を計算するときに適用される規則は、クエリが自動パラメータ化されているかどうかによって異なります。

したがって、クエリ内の同様の式が異なる結果を生成することがあります。 クエリが自動パラメータ化されていない場合、定数値は最初に数値に変換され、その精度は定数の値を保持するのに十分な大きさになり、指定されたデー たとえば、定数値1はnumeric(1,0)に変換され、定数値250はnumeric(3,0)に変換されます。

クエリが自動パラメータ化されると、定数値は常に最終データ型に変換する前にnumeric(10,0)に変換されます。 /演算子が含まれている場合、類似のクエリ間で結果の型の精度が異なるだけでなく、結果の値も異なる可能性があります。 たとえば、式SELECT CAST (1.0 / 7 AS float)を含む自動パラメータ化クエリの結果値は、自動パラメータ化されていない同じクエリの結果値とは異なります。

整数データの変換

整数が文字データ型に暗黙的に変換されるとき、整数が大きすぎて文字フィールドに収まらない場合、SQL ServerはASCII文字42、アスタリスク(*)

2,147,483,647より大きい整数定数は、bigintデータ型ではなくdecimalデータ型に変換されます。 次の例は、しきい値を超えると、結果のデータ型がintからdecimalに変更されることを示しています。p>

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

ここに結果セットがあります。次の例では、bigint、int、smallint、およびtinyintデータ型を使用してテーブルを作成します。 値は各列に挿入され、SELECTステートメントで返されます。p>

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; 

ここに結果セットがあります。

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

も参照してください

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