int、bigint、smallint、および tinyint (Transact-SQL)

Applies to: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric の SQL 分析エンドポイント Microsoft Fabric のウェアハウス

整数データを使用する実数データ型です。 データベースの容量を節約するために、すべての可能な値を確実に含めることができる最小のデータ型を使用します。 たとえば、 tinyint は、255 歳以上になる人がいないため、1 人の年齢で十分です。 しかし、建物は255歳以上になる可能性があるため、建物の年齢には不十分です。

データ型 Range 範囲の表記 ストレージ
bigint -9,223,372,036,854,775,808 から 9,223,372,036,854,775,807 -2^63 から 2^63-1 8 バイト
int -2,147,483,648 ~ 2,147,483,647 -2^31 から 2^31-1 4 バイト
smallint -32,768 ~ 32,767 -2^15 から 2^15-1 2 バイト
tinyint 0 ~ 255 2^0-1 から 2^8-1 1 バイト

解説

Int データ型は、主要な整数データ型が SQL Serverです。 Bigint データ型が使用するための整数値でサポートされている範囲を超える可能性があるときに、 int データ型。

bigint 間に位置 smallmoneyint データ型の優先順位表でします。

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

変換とパラメーター化

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

したがって、クエリで同じ式を使用しても異なる結果が得られることがあります。 クエリが自動パラメーター化されていない場合、定数値は最初に decimal に変換されます。その有効桁数は、指定したデータ型に変換する前に、定数の値を保持するのに十分な大きさです。 たとえば、定数値 1decimal(1,0)に変換され、定数値 250decimal(3,0)に変換されます。

クエリが自動パラメーター化されると、定数値は常に decimal(10,0) に変換されてから、最終的なデータ型に変換されます。 / 演算子を使用すると、同様のクエリで結果の型の有効桁数が異なるだけでなく、結果の値も異なる場合があります。 たとえば、式 SELECT CAST (1.0 / 7 AS float)を含む自動パラメーター化クエリの結果値は、自動パラメーター化されていない同じクエリの結果値とは異なります。これは、自動パラメーター化されたクエリの結果が、 decimal(10,0) データ型に収まるように切り捨てられるためです。

tinyint データ型は、Microsoft Fabric ではサポートされていません。

整数データの変換

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

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

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

結果セットは次のとおりです。

Result1      Result2
-----------  ------------------
1073741823   1073741824.500000

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

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