SQL Server支持的數據類型
數據類型
|
說明
|
BIGINT
|
從 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型數據(整數)。
|
INT
|
從 -2^31 (-2,147,483,648) 到 2^31-1 (2,147,483,647) 的整型數據(整數)。
|
SMALLINT
|
從 2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型數據。
|
TINYINT
|
從 0 到 255 的整型數據。
|
BIT
|
非 1 即 0 的整型數據。
|
DECIMAL
|
從 -10^38 +1 到 10^38 -1 的固定精度和標度的數字數據。
|
NUMERIC
|
功能上相當于十進制數。
|
MONEY
|
從 -2^63 (-922,337,203,685,477.5808) 到 2^63 - 1 (+922,337,203,685,477.5807) 的貨幣型數據,精確到貨幣單位的萬分之一。
|
SMALLMONEY
|
從 -214,748.3648 到 +214,748.3647 的貨幣型數據,精確到貨幣單位的萬分之一。
|
FLOAT
|
從 -1.79E + 308 到 1.79E + 308 的浮點精度數字數據。
|
REAL
|
從 -3.40E + 38 到 3.40E + 38 的浮點精度數字數據。
|
DATETIME
|
從 1753 年 1 月 1 日到 9999 年 12 月 31 日的日期和時間數據,精確到三百分之一秒(3.33 毫秒)。
|
SMALLDATETIME
|
從 1900 年 1 月 1 日到 2079 年 6 月 6 日的日期和時間數據,精確到一分鐘。
|
CHAR
|
最大長度 8000 個字符的固定長度非 Unicode 字符數據。
|
VARCHAR
|
最大長度 8000 個字符的可變長度非 Unicode 字符數據。
|
TEXT
|
最大長度 2^31 - 1 (2,147,483,647) 個字符的可變長度非 Unicode 數據。
|
NCHAR
|
最大長度 4,000 個字符的固定長度 Unicode 數據。
|
NVARCHAR
|
最大長度 4000 個字符的可變長度 Unicode 數據。sysname 是系統提供的用戶定義數據類型,功能上相當于 nvarchar(128),用于引用數據庫對象名稱。
|
NTEXT
|
最大長度 2^31 - 1 (1,073,741,823) 個字符的可變長度 Unicode 數據。
|
BINARY
|
最大長度 8,000 個字節的固定長度二進制數據。
|
VARBINARY
|
最大長度 8,000 個字節的可變長度二進制數據。
|
IMAGE
|
最大長度 2^31 - 1 (2,147,483,647) 字節的可變長度二進制數據。
|
CURSOR
|
對光標的引用。
|
SQL_VARIANT
|
存儲 SQL Server 支持的數據類型(text、ntext、timestamp 和 sql_variant 除外)值的數據類型。
|
TABLE
|
用于存儲結果集合供以后處理的特殊數據類型。
|
TIMESTAMP
|
整個數據庫中都唯一的一個數字,隨著行的每次更新而更新。
|
UNIQUEIDENTIFIER
|
全局唯一標識符 (GUID)。
|
(1)二進制數據類型
二進制數據包括
Binary、Varbinary 和 Image Binary 數據類型既可以是固定長度的(Binary),也可以是變長度的。
Binary[(n)] 是 n 位固定的二進制數據。其中,n 的取值范圍是從 1 到 8000。其存儲窨的大小是 n + 4 個字節。
Varbinary[(n)] 是 n 位變長度的二進制數據。其中,n 的取值范圍是從 1 到 8000。其存儲窨的大小是 n + 4個字節,不是n 個字節。
在 Image 數據類型中存儲的數據是以位字符串存儲的,不是由 SQL Server 解釋的,必須由應用程序來解釋。例如,應用程序可以使用BMP、TIEF、GIF 和 JPEG 格式把數據存儲在 Image 數據類型中。
(2)字符數據類型
字符數據的類型包括
Char,Varchar 和 Text 字符數據是由任何字母、符號和數字任意組合而成的數據。
Varchar 是變長字符數據,其長度不超過 8KB。Char 是定長字符數據,其長度最多為 8KB。超過 8KB 的ASCII 數據可以使用Text數據類型存儲。例如,因為 Html 文檔全部都是 ASCII 字符,并且在一般情況下長度超過 8KB,所以這些文檔可以 Text 數據類型存儲在SQL Server 中。
(3)Unicode 數據類型
Unicode 數據類型包括
Nchar,Nvarchar 和Ntext 在 Microsoft SQL Server 中,傳統的非 Unicode 數據類型允許使用由特定字符集定義的字符。在 SQL Server安裝過程中,允許選擇一種字符集。使用 Unicode 數據類型,列中可以存儲任何由Unicode 標準定義的字符。在 Unicode 標準中,包括了以各種字符集定義的全部字符。使用Unicode數據類型,所戰勝的窨是使用非 Unicode 數據類型所占用的窨大小的兩倍。
在 SQL Server 中,Unicode 數據以 Nchar、Nvarchar 和 Ntext 數據類型存儲。使用這種字符類型存儲的列可以存儲多個字符集中的字符。當列的長度變化時,應該使用Nvarchar 字符類型,這時最多可以存儲 4000 個字符。當列的長度固定不變時,應該使用 Nchar 字符類型,同樣,這時最多可以存儲4000 個字符。當使用 Ntext 數據類型時,該列可以存儲多于 4000 個字符。
(4)日期和時間數據類型
日期和時間數據類型包括
Datetime 和 Smalldatetime兩種類型
日期和時間數據類型由有效的日期和時間組成。例如,有效的日期和時間數據包括“4/01/98 12:15:00:00:00 PM”和“1:28:29:15:01AM 8/17/98”。前一個數據類型是日期在前,時間在后一個數據類型是霎時間在前,日期在后。在 Microsoft SQL Server中,日期和時間數據類型包括Datetime 和 Smalldatetime 兩種類型時,所存儲的日期范圍是從 1753 年 1 月 1 日開始,到9999 年12 月 31 日結束(每一個值要求 8 個存儲字節)。使用 Smalldatetime 數據類型時,所存儲的日期范圍是 1900年 1 月 1日 開始,到 2079 年 12 月 31 日結束(每一個值要求 4 個存儲字節)。
日期的格式可以設定。設置日期格式的命令如下:
Set DateFormat {format | @format _var|
其中,format | @format_var 是日期的順序。有效的參數包括 MDY、DMY、YMD、YDM、MYD 和 DYM。在默認情況下,日期格式為MDY。
例如,當執行 Set DateFormat YMD 之后,日期的格式為年 月 日 形式;當執行 Set DateFormat DMY 之后,日期的格式為日 月有年 形式
(5)數字數據類型
數字數據只包含數字。數字數據類型包括正數和負數、小數(浮點數)和整數
整數由正整數和負整數組成,例如 39、25、0-2 和 33967。在 Micrsoft SQL Server 中,整數存儲的數據類型是
Int,Smallint和 Tinyint。Int 數據類型存儲數據的范圍大于 Smallint 數據類型存儲數據的范圍,而 Smallint 據類型存儲數據的范圍大于Tinyint 數據類型存儲數據的范圍。使用 Int 數據狗昔存儲數據的范圍是從 -2 147 483 648 到 2 147 483 647(每一個值要求4個字節存儲空間)。使用 Smallint 數據類型時,存儲數據的范圍從 -32 768 到 32 767(每一個值要求2個字節存儲空間)。使用Tinyint 數據類型時,存儲數據的范圍是從0 到255(每一個值要求1個字節存儲空間)。
精確小婁數據在 SQL Server 中的數據類型是 Decimal 和 Numeric。這種數據所占的存儲空間根據該數據的位數后的位數來確定。
在SQL Server 中,近似小數數據的數據類型是 Float 和 Real。例如,三分之一這個分數記作。3333333,當使用近似數據類型時能準確表示。因此,從系統中檢索到的數據可能與存儲在該列中數據不完全一樣。
(6)貨幣數據表示正的或者負的貨幣數量 。
在 Microsoft SQL Server 中,貨幣數據的數據類型是
Money 和 Smallmoney Money數據類型要求 8 個存儲字節,Smallmoney 數據類型要求 4 個存儲字節。
(7)特殊數據類型
特殊數據類型包括前面沒有提過的數據類型。特殊的數據類型有3種,即
Timestamp、Bit 和 Uniqueidentifier。
Timestamp 用于表示SQL Server 活動的先后順序,以二進投影的格式表示。Timestamp 數據與插入數據或者日期和時間沒有關系。
Bit 由 1 或者 0 組成。當表示真或者假、ON 或者 OFF 時,使用 Bit 數據類型。例如,詢問是否是每一次訪問的客戶機請求可以存儲在這種數據類型的列中。
Uniqueidentifier 由 16 字節的十六進制數字組成,表示一個全局唯一的。當表的記錄行要求唯一時,GUID是非常有用。例如,在客戶標識號列使用這種數據類型可以區別不同的客戶。
2.用戶定義的數據類型
用戶定義的數據類型基于在 Microsoft SQL Server 中提供的數據類型。當幾個表中必須存儲同一種數據類型時,并且為保證這些列有相同的數據類型、長度和可空性時,可以使用用戶定義的數據類型。例如,可定義一種稱為 postal_code 的數據類型,它基于 Char 數據類型。
當創建用戶定義的數據類型時,必須提供三個數:數據類型的名稱、所基于的系統數據類型和數據類型的可空性。
(1)創建用戶定義的數據類型
創建用戶定義的數據類型可以使用 Transact-SQL 語句。系統存儲過程 sp_addtype 可以來創建用戶定義的數據類型。其語法形式如下:
sp_addtype {type},[,system_data_bype][,'null_type']
其中,type 是用戶定義的數據類型的名稱。system_data_type 是系統提供的數據類型,例如 Decimal、Int、Char 等等。 null_type 表示該數據類型是如何處理空值的,必須使用單引號引起來,例如'NULL'、'NOT NULL'或者'NONULL'。
例子:
Use cust
Exec sp_addtype ssn,'Varchar(11)',"Not Null'
創建一個用戶定義的數據類型 ssn,其基于的系統數據類型是變長為11 的字符,不允許空。
例子:
Use cust
Exec sp_addtype birthday,datetime,'Null'
創建一個用戶定義的數據類型 birthday,其基于的系統數據類型是 DateTime,允許空。
例子:
Use master
Exec sp_addtype telephone,'varchar(24),'Not Null'
Eexc sp_addtype fax,'varchar(24)','Null' 創建兩個數據類型,即 telephone 和 fax
(2)刪除用戶定義的數據類型 當用戶定義的數據類型不需要時,可刪除。刪除用戶定義的數據類型的命令是 sp_droptype {'type'}。
例子:
Use master
Exec sp_droptype 'ssn'
注意:當表中的列還正在使用用戶定義的數據類型時,或者在其上面還綁定有默認或者規則時,這種用戶定義的數據類型不能刪除。