SQL Server 2005 中的數據類型歸納為下列類別:精確數字
bigint
decimal
int
numeric
smallint
money
tinyint
smallmoney
bit
近似數字
float
real
日期和時間
datetime
smalldatetime
字符串
char
text
varchar
Unicode字符串
nchar
ntext
nvarchar
二進制字符串
binary
image
varbinary
其他數據類型
cursor
timestamp
sql_variant
uniqueidentifier
table
1、精確數字
I) 整型數據類型int、bigint、smallint 和 tinyint
數據類型
范圍
存儲
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 字節
II) bit 可以取值為 1、0 或 NULL 的整數數據類型。如果表中的列為 8 bit 或更少,則這些列作為 1 個字節存儲。如果列為 9 到 16 bit,則這些列作為 2 個字節存儲,以此類推。字符串值 TRUE 和 FALSE 可以轉換為以下 bit 值:TRUE 轉換為 1,FALSE 轉換為 0。
III) decimal 和 numeric,兩者都是帶固定精度和小數位數的數值數據類型。decimal[ (p[ , s] )] 和 numeric[ (p[ , s] )] 兩者都是固定精度和小數位數。使用最大精度時,有效值從 - 10^38 +1 到 10^38 - 1。numeric 在功能上等價於 decimal。p(精度)最多可以存儲的十進制數字的總位數,包括小數點左邊和右邊的位數。該精度必須是從 1 到最大精度 38 之間的值。默認精度為 18。s(小數位數)小數點右邊可以存儲的十進制數字的最大位數。小數位數必須是從 0 到 p 之間的值。僅在指定精度後才可以指定小數位數。默認的小數位數為 0;因此,0 <= s <= p。最大存儲大小基於精度而變化。
Ⅳ) money 和 smallmoney,兩者是 代表貨幣或貨幣值的數據類型。
數據類型
范圍
存儲
money
-922,337,203,685,477.5808 到 922,337,203,685,477.5807
8 字節
smallmoney
-214,748.3648 到 214,748.3647
4 字節
money 和 smallmoney 數據類型精確到它們所代表的貨幣單位的萬分之一。
2、近似數字 float 和 real,兩者用於表示浮點數值數據的大致數值數據類型。浮點數據為近似值;因此,並非 數據類型范圍內的所有值都能精確地表示。
數據類型
范圍
存儲
float
-1.79E + 308 至 -2.23E - 308、0 以及 2.23E - 308 至 1.79E + 308
取決於 n 的值
real
-3.40E + 38 至 -1.18E - 38、0 以及 1.18E - 38 至 3.40E + 38
4 字節
float [ ( n ) ] 其中 n 為用於存儲 float 數值尾數的位數,以科學記數法表示,因此可以確定精度和存儲大小。如果指定了 n,則它必須是介於 1 和 53 之間的某個值。n 的默認值為 53。
3、日期和時間 datetime 和 smalldatetime 兩者用於表示某天的日期和時間的數據類型。
數據類型
范圍
精確度
datetime
1753 年 1 月 1 日到 9999 年 12 月 31 日
3.33 毫秒
smalldatetime
1900 年 1 月 1 日到 2079 年 6 月 6 日
1 分鐘
datetime用兩個 4 字節的整數存儲,第一個 4 字節存儲"基礎日期"(即 1900 年 1 月 1 日)之前或之後的天數。基礎日期是系統參照日期。另外一個 4 字節存儲天的時間(以午夜後經過的毫秒數表示)。
smalldatetime 數據類型存儲天的日期和時間,但精確度低於 datetime.數據庫引擎 將 smalldatetime 值存儲為兩個 2 字節的整數。第一個 2 字節存儲 1900 年 1 月 1 日後的天數。另外一個 2 字節存儲午夜後經過的分鐘數。
4、字符串char [ ( n ) ],varchar [ ( n | max ) ],text
char [ ( n ) ]可以存儲字母數字值,固定長度,非 Unicode 字符數據,長度為 n 個字節。n 的取值范圍為 1 至 8,000,存儲大小是 n 個字節。如果未在數據定義或變量聲明語句中指定 n,則默認長度為 1.如果在使用 CAST 和 CONVERT 函數時未指定 n,則默認長度為 30.
varchar [ ( n | max ) ] 可以存儲字母數字值,可變長度,非 Unicode 字符數據。n 的取值范圍為 1 至 8,000.max 指示最大存儲大小是 2^31-1 個字節。存儲大小是輸入數據的實際長度加 2 個字節。所輸入數據的長度可以為 0 個字符。如果未在數據定義或變量聲明語句中指定 n,則默認長度為 1.如果在使用 CAST 和 CONVERT 函數時未指定 n,則默認長度為 30.
text服務器代碼頁中長度可變的非 Unicode 數據,最大長度為 2^31-1 (2,147,483,647) 個字符。當服務器代碼頁使用雙字節字符時,存儲仍是 2,147,483,647 字節。根據字符串,存儲大小可能小於 2,147,483,647 字節。
備注:在 Microsoft SQL Server 的未來版本中將刪除 ntext、text 和 image 數據類型。請避免在新開發工作中使用這些數據類型,並考慮修改當前使用這些數據類型的應用程序。請改用 nvarchar(max)、varchar(max) 和 varbinary(max)。
5、Unicode字符串 nchar [ ( n ) ],nvarchar [ ( n | max ) ],ntext
nchar [ ( n ) ] ,n 個字符的固定長度的 Unicode 字符數據。n 值必須在 1 到 4,000 之間(含)。存儲大小為兩倍 n 字節。如果沒有在數據定義或變量聲明語句中指定 n,則默認長度為 1.如果沒有使用 CAST 函數指定 n,則默認長度為 30.
nvarchar [ ( n | max ) ],可變長度 Unicode 字符數據。n 值在 1 到 4,000 之間(含)。max 指示最大存儲大小為 2^31-1 字節。存儲大小是所輸入字符個數的兩倍 + 2 個字節。所輸入數據的長度可以為 0 個字符。如果沒有在數據定義或變量聲明語句中指定 n,則默認長度為 1.如果沒有使用 CAST 函數指定 n,則默認長度為 30.
ntext是長度可變的 Unicode 數據,最大長度為 2^30 - 1 (1,073,741,823) 個字符。存儲大小是所輸入字符個數的兩倍(以字節為單位)。
備注:如果站點支持多語言,請考慮使用 Unicode nchar 或 nvarchar 數據類型,以最大限度地消除字符轉換問題。
6、二進制字符串 binary [ ( n ) ],varbinary [ ( n | max ) ],image
binary [ ( n ) ],varbinary [ ( n | max ) ]兩者是固定長度或可變長度的 Binary 數據類型。binary [ ( n ) ] 長度為 n 字節的固定長度二進制數據,其中 n 是從 1 到 8,000 的值。存儲大小為 n 字節。如果未在數據定義或變量聲明語句中指定 n,則默認長度為 1.如果未使用 CAST 函數指定 n,則默認長度為 30.varbinary [ ( n | max ) ] 可變長度二進制數據。n 可以取從 1 到 8,000 的值。max 指示最大的存儲大小為 2^31-1 字節。存儲大小為所輸入數據的實際長度 + 2 個字節。所輸入數據的長度可以是 0 字節。如果未在數據定義或變量聲明語句中指定 n,則默認長度為1.如果未使用 CAST 函數指定 n,則默認長度為 30.
Image長度可變的二進制數據,從 0 到 2^31-1 (2,147,483,647) 個字節。
7、其他數據類型
Ⅰ) 這是變量或存儲過程 OUTPUT 參數的一種數據類型,這些參數包含對游標的引用。使用 cursor 數據類型創建的變量可以為空。
有些操作可以引用那些帶有 cursor 數據類型的變量和參數,這些操作包括:
DECLARE @local_variable 和 SET @local_variable 語句。
OPEN、FETCH、CLOSE 及 DEALLOCATE 游標語句。
存儲過程輸出參數。
CURSOR_STATUS 函數。
sp_cursor_list、sp_describe_cursor、sp_describe_cursor_tables 以及 sp_describe_cursor_columns 系統存儲過程。
備注:對於 CREATE TABLE 語句中的列,不能使用 cursor 數據類型。
Ⅱ) sql_variant
一種數據類型,用於存儲 SQL Server 2005 支持的各種數據類型(不包括 text、ntext、image、timestamp 和 sql_variant)的值。
sql_variant 可以用在列、參數、變量和用戶定義函數的返回值中。sql_variant 使這些數據庫對象能夠支持其他數據類型的值。
Ⅲ)table
一種特殊的數據類型,用於存儲結果集以進行後續處理。table 主要用於臨時存儲一組行,這些行是作為表值函數的結果集返回的。可將函數和變量聲明為 table 類型。table 變量可用於函數、存儲過程和批處理中。
Ⅳ) timestamp
公開數據庫中自動生成的唯一二進制數字的數據類型。timestamp 通常用作給表行加版本戳的機制。存儲大小為 8 個字節。
每個數據庫都有一個計數器,當對數據庫中包含 timestamp 列的表執行插入或更新操作時,該計數器值就會增加。該計數器是數據庫時間戳。這可以跟蹤數據庫內的相對時間,而不是時鐘相關聯的實際時間。一個表只能有一個 timestamp 列。每次修改或插入包含 timestamp 列的行時,就會在 timestamp 列中插入增量數據庫時間戳值。這一屬性使 timestamp 列不適合作為鍵使用,尤其是不能作為主鍵使用。對行的任何更新都會更改 timestamp 值,從而更改鍵值。如果該列屬於主鍵,那麼舊的鍵值將無效,進而引用該舊值的外鍵也將不再有效。如果該表在動態游標中引用,則所有更新均會更改游標中行的位置。如果該列屬於索引鍵,則對數據行的所有更新還將導致索引更新。
使用某一行中的 timestamp 列可以很容易地確定該行中的任何值自上次讀取以後是否發生了更改。如果對行進行了更改,就會更新該時間戳值。如果沒有對行進行更改,則該時間戳值將與以前讀取該行時的時間戳值一致。rowversion 的數據類型為 timestamp 數據類型的同義詞,並具有數據類型同義詞的行為。在 DDL 語句,請盡量使用 rowversion 而不是 timestamp.如果不指定列名,則 Microsoft SQL Server 2005 Database Engine 將生成 timestamp 列名;但 rowversion 同義詞不具有這樣的行為。在使用 rowversion 時,必須指定列名。不可為空的 timestamp 列在語義上等同於 binary(8) 列。可為空的 timestamp 列在語義上等同於 varbinary(8) 列。
Ⅴ) uniqueidentifier
16 字節 GUID.uniqueidentifier 數據類型的列或局部變量可通過以下方式初始化為一個值:
使用 NEWID 函數。
從 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 形式的字符串常量轉換,其中,每個 x 是一個在 0-9 或 a-f 范圍內的十六進制數字。例如,6F9619FF-8B86-D011-B42D-00C04FC964FF 為有效 uniqueidentifier 值。
比較運算符可與 uniqueidentifier 值一起使用。不過,排序不是通過比較兩個值的位模式來實現的。可針對 uniqueidentifier 值執行的運算只有比較運算(=、<>、<、>、<=、>=)以及檢查是否為 NULL(IS NULL 和 IS NOT NULL)。不能使用其他算術運算符。除 IDENTITY 之外的所有列約束和屬性均可對 uniqueidentifier 數據類型使用。
具有更新訂閱的合並復制和事務復制使用 uniqueidentifier 列來確保在表的多個副本中唯一地標識行。
Ⅵ) xml
存儲 XML 數據的數據類型。可以在列中或者 xml 類型的變量中存儲 xml 實例。存儲的 xml 數據類型表示實例大小不能超過 2 GB.