次の方法で共有


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

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のウェアハウス

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

データ型 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 では、他の整数データ型 (tinyint、smallintint) が bigint に自動的に昇格されることはありません。

変換とパラメーター化

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

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