int、bigint、smallint 和 tinyint (Transact-SQL)
使用整數資料的 Exact-number 資料類型。
適用於:SQL Server (SQL Server 2008 透過目前版本)、Windows Azure SQL 資料庫 (初始版本,透過目前版本)。 |
資料類型 |
範圍 |
儲存體 |
---|---|---|
bigint |
-2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807) |
8 位元組 |
int |
-2^31 (-2,147,483,648) 到 2^31-1 (2,147,483,647) |
4 個位元組 |
smallint |
-2^15 (-32,768) 到 2^15-1 (32,767) |
2 位元組 |
tinyint |
0 到 255 |
1 位元組 |
備註
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 在計算運算式結果的資料類型和有效位數時所套用的規則,會根據查詢是否自動參數化而有所不同。
因此,查詢中類似的運算式,有時候也會產生不同的結果。如果查詢不是自動參數化,則常數值會先轉換為 numeric (其有效位數只是剛好可以容納常數值) 之後,再轉換為指定的資料類型。例如,先將常數值 1 轉換為 numeric (1, 0),再將常數值 250 轉換為 numeric (3, 0)。
當查詢經過自動參數化時,常數值一律會先轉換為 numeric (10, 0),再轉換為最終資料類型。如果有用到 / 運算子,則不僅類似查詢的結果類型有效位數不同,結果值也可能不一樣。例如,包含運算式 SELECT CAST (1.0 / 7 AS float) 的自動參數化查詢結果值,與非自動化參數之相同查詢的結果值不同,因為自動化參數的查詢結果,會配合 numeric (10, 0) 資料類型而被截斷。
轉換整數資料
當整數隱含地轉換成字元資料類型時,如果該整數太大而無法放入字元欄位中,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
範例
下列範例會使用 bigint、int、smallint 和 tinyint 資料類型建立資料表。 值插入每個資料行,並在 SELECT 陳述式中傳回值。
CREATE TABLE dbo.MyTable
(
MyBigIntColumn bigint
,MyIntColumn int
,MySmallIntColumn smallint
,MyTinyIntColumn tinyint
);
GO
INSERT INTO dbo.MyTable VALUES (9223372036854775807, 214483647,32767,255);
GO
SELECT MyBigIntColumn, MyIntColumn, MySmallIntColumn, MyTinyIntColumn
FROM dbo.MyTable;
以下為結果集:
MyBigIntColumn MyIntColumn MySmallIntColumn MyTinyIntColumn
-------------------- ----------- ---------------- ---------------
9223372036854775807 214483647 32767 255
(1 row(s) affected)
請參閱
參考
DECLARE @local\_variable (Transact-SQL)