適用於:SQL Server
Azure SQL 資料庫
Azure SQL 受控執行個體
Azure Synapse Analytics
分析平台系統(PDW)
Microsoft Fabric 中的 SQL 分析端點
Microsoft Fabric 中的倉儲
Microsoft Fabric 中的 SQL 資料庫
使用整數資料的 Exact-number 資料類型。 若要節省資料庫中的空間,請使用能夠包含所有可能值的最小資料類型。 例如, tinyint 對於具有狀態值的小型查找表來說已經足夠了,因為它可以儲存多達 256 列。 但對於員工名單來說, 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 位元組 |
Remarks
int 資料類型是 SQL Server 中的主要整數資料類型。 bigint 資料類型通常是在整數值可能超過 int 資料類型所支援的範圍時使用。
bigint 位於資料類型優先順序圖表中 smallmoney 和 int 之間。
僅當參數運算式的資料類型是 bigint 時,函式才會傳回 bigint。 SQL Server 不會自動將其他整數數據類型 (tinyint、smallint 和 int) 升階為 bigint。
轉換和參數化
當您使用 +、 -、 *、 /或 % 算術運算子將 int、 smallint、 tinyint 或 bigint 常數值隱含或明確轉換為 浮點、 實數、 十進位或 數值 資料類型時,SQL Server 在計算運算式結果的資料類型和精確度時所套用的規則會因查詢是否自動參數化而有所不同。
因此,查詢中類似的運算式,有時候也會產生不同的結果。 當查詢未自動參數化時,常數值會先轉換成 十進位,其精確度剛好足以保存常數的值,然後再轉換成指定的數據類型。 例如,常數值1會轉換成 decimal(1,0),而常數值250會轉換成 decimal(3,0)。
自動參數化查詢時,常數值一律會轉換成 decimal(10,0), 然後再轉換成最終數據類型。 如果有用到 / 運算子,則不僅類似查詢的結果類型有效位數不同,結果值也可能不一樣。 例如,包含表達式 SELECT CAST (1.0 / 7 AS float)的自動參數化查詢結果值與未自動參數化之相同查詢的結果值不同,因為自動參數化查詢的結果會截斷成符合 decimal(10,0) 數據類型。
Microsoft Fabric 不支援 tinyint 數據類型。
轉換整數數據
當整數隱含轉換成字元數據類型時,如果整數太大而無法放入字元欄位,SQL Server 會使用 ASCII 字元 42,星號 (*)。
大於 2,147,483,647 的整數常數會轉換成 decimal 資料類型,而不是 bigint 資料類型。 下列範例顯示當超出臨界值時,結果的資料類型會從 int 變更為 decimal。
SELECT 2147483647 / 2 AS Result1,
2147483649 / 2 AS Result2;
結果集如下所示。
Result1 Result2
----------- ------------------
1073741823 1073741824.500000
Examples
下列範例會使用 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