使用整數數據的精確數字數據類型。
數據類型 |
範圍 |
存儲 |
---|---|---|
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) 數據類型。有關參數化查詢的詳細信息,請參閱簡單參數化。 |
***********************************************************************************************************
二。註釋
在支持整數值的地方支持 bigint 數據類型。但是,bigint 用於某些特殊的情況,當整數值超過 int 數據類型支持的範圍時,就可以採用 bigint。在 SQL Server 中,int 數據類型是主要的整數數據類型。
在數據類型優先次序表中,bigint 位於 smallmoney 和 int 之間。
只有當參數表達式是 bigint 數據類型時,函數才返回 bigint。SQL Server 不會自動將其它整數數據類型(tinyint、smallint 和 int)提升爲 bigint。
三。總結
所以選擇最恰當的數據類型是非常重要的,例如,給你10個18位的全是數字的身份證號碼,和10個15位的全是數字的身份證號碼。讓你以最快的查詢的速度查找出來,這20個記錄,那麼你在設計這個字段的時候,應該有幾個地方要注意:
1. 最快的查詢速度,無非我們選擇int類型的數據來存儲這20個身份證號碼。但是15位和18位的數據貌似只有bigint才滿足條件。
2. 有人要說爲啥不用varchar或者char呢。直接存成一個字符串。這個問題問的比較好,首先,int的查詢速度肯定比varchar和char要快,那麼int類型的數據是首選,但是int在sqlserver中有好幾種。這個就要選擇最恰當的數據類型。
*************************************************************************************************************
decimal 和 numeric (Transact-SQL)
帶固定精度和小數位數的數值數據類型。