sql2000数据类型大全(转)
数据
类
型
在
Microsoft® SQL Server™
中,
每
个列、局部
变
量、表达式和参数都有一个相
关
的数据
类
型,
这
是指定
对
象可持有的数据
类
型(整型、字符、
money
等等)的特性。
SQL Server
提供系
统
数据
类
型集,定
义
了可与
SQL Server
一起使用的所有数据
类
型。下面列出系
统
提供的数据
类
型集。
可以定
义
用
户
定
义
的数据
类
型,其是系
统
提供的数据
类
型的
别
名。有
关
用
户
定
义
的数据
类
型的更多信息,
请
参
见
sp_addtype
和
创
建用
户
定
义
的数据
类
型。
当两个具有不同数据
类
型、排序
规则
、精度、小数位数或
长
度的表达式通
过
运算符
进
行
组
合
时
:
通
过
将数据
类
型的
优
先
顺
序
规则应
用到
输
入表达式的数据
类
型来确定所得
值
的数据
类
型。有
关
更多信息,
请
参
见
数据
类
型的
优
先
顺
序。
如果
结
果数据
类
型
为
char
、
varchar
、
text
、
nchar
、
nvarchar
或
ntext
,
则结
果
值
的排序
规则
由排序
规则
的
优
先
顺
序
规则
决定。有
关
更多信息,
请
参
见
排序
规则
的
优
先
顺
序。
结
果的精度、小数位数及
长
度取决于
输
入表达式的精度、小数位数及
长
度。有
关
更多信息,
请
参
见
精度、小数位数和
长
度。
SQL Server
为
SQL-92
兼容性提供了数据
类
型同
义词
。有
关
更多信息,
请
参
见
数据
类
型同
义词
。
FcPw~ O ^
G?[1$nwww.tzsy.cn
精确数字
整数
int
、
bigint
、
smallint
和
tinyint
使用整数数据的精确数字数据
类
型。
bigint
从
-2^63 (-9223372036854775808)
到
2^63-1 (9223372036854775807)
的整型数据(所有数字)。存
储
大小
为
8
个字
节
。
int
从
-2^31 (-2,147,483,648)
到
2^31 - 1 (2,147,483,647)
的整型数据(所有数字)。存
储
大小
为
4
个字
节
。
int
的
SQL-92
同
义
字
为
integer
。
smallint
从
-2^15 (-32,768)
到
2^15 - 1 (32,767)
的整型数据。存
储
大小
为
2
个字
节
。
tinyint
从
0
到
255
的整型数据。存
储
大小
为
1
字
节
。
注
释
在支持整数
值
的地方支持
bigint
数据
类
型。但是,
bigint
用于某些特殊的情况,当整数
值
超
过
int
数据
类
型支持的范
围时
,就可以采用
bigint
。在
SQL Server
中,
int
数据
类
型是主要的整数数据
类
型。
在数据
类
型
优
先次序表中,
bigint
位于
smallmoney
和
int
之
间
。
只有当参数表达式是
bigint
数据
类
型
时
,函数才返回
bigint
。
SQL Server
不会自
动
将其它整数数据
类
型(
tinyint
、
smallint
和
int
)提升
为
bigint
。
bit
整型数据
1
、
0
或
NULL
。
注
释
不能
对
bit
类
型的列使用索引。
Microsoft® SQL Server™
优
化用于
bit
列的存
储
。如果一个表中有不多于
8
个的
bit
列,
这
些列将作
为
一个字
节
存
储
。如果表中有
9
到
16
个
bit
列,
这
些列将作
为
两个字
节
存
储
。更多列的情况依此
类
推。
decimal
和
numeric
带
定点精度和小数位数的
numeric
数据
类
型。
decimal[(p[, s])]
和
numeric[(p[, s])]
定点精度和小数位数。使用最大精度
时
,有效
值
从
- 10^38 +1
到
10^38 - 1
。
decimal
的
SQL-92
同
义词
是
dec
和
dec(p, s)
。
p
(精度)
指定小数点左
边
和右
边
可以存
储
的十
进
制数字的最大个数。精度必
须
是从
1
到最大精度之
间
的
值
。最大精度
为
38
。
s
(小数位数)
指定小数点右
边
可以存
储
的十
进
制数字的最大个数。小数位数必
须
是从
0
到
p
之
间
的
值
。默
认
小数位数是
0
,因而
0 <= s <= p
。最大存
储
大小基于精度而
变
化。
精度存
储
字
节
数
1 - 9 5
10-19 9
20-28 13
29-38 17
money
和
smallmoney
代表
货币
或
现
金
值
的
货币
数据
类
型。
money
货币
数据
值
介于
-2^63 (-922,337,203,685,477.5808)
与
2^63 - 1 (+922,337,203,685,477.5807)
之
间
,精确到
货币单
位的千分之十。存
储
大小
为
8
个字
节
。
smallmoney
货币
数据
值
介于
-214,748.3648
与
+214.748,3647
之
间
,精确到
货币单
位的千分之十。存
储
大小
为
4
个字
节
。
近似数字
float
和
real
用于表示浮点数字数据的近似数字数据
类
型。浮点数据
为
近似
值
;并非数据
类
型范
围
内的所有数据都能精确地表示。
语
法
float [ ( n ) ]
从
- 1.79E + 308
到
1.79E + 308
之
间
的浮点数字数据。
n
为
用于存
储
科学
记
数法
float
数尾数的位数,同
时
指示其精度和存
储
大小。
n
必
须为
从
1
到
53
之
间
的
值
。
n
所在范
围
精度 存
储
大小
1-24 7
位数
4
字
节
25-53 15
位数
8
字
节
Microsoft® SQL Server™ float[(n)]
数据
类
型
对
于从
1
到
53
之
间
的所有
n
值
均符合
SQL-92
标
准。
double precision
的同
义词为
float(53)
。
real
从
?3.40E + 38
到
3.40E + 38
之
间
的浮点数字数据。存
储
大小
为
4
字
节
。在
SQL Server
中,
real
的同
义词为
float(24)
。
datetime
和
smalldatetime
代表日期和一天内的
时间
的日期和
时间
数据
类
型。
datetime
从
1753
年
1
月
1
日到
9999
年
12
月
31
日的日期和
时间
数据,精确度
为
百分之三秒(等于
3.33
毫秒或
0.00333
秒)。如下表所示,把
值调
整到
.000
、
.003
、或
.007
秒的增量。
示例
调
整后的示例
01/01/98 23:59:59.999 1998-01-02 00:00:00.000
01/01/98 23:59:59.995,
01/01/98 23:59:59.996,
01/01/98 23:59:59.997,
或
01/01/98 23:59:59.998 1998-01-01 23:59:59.997
01/01/98 23:59:59.992,
01/01/98 23:59:59.993,
01/01/98 23:59:59.994 1998-01-01 23:59:59.993
01/01/98 23:59:59.990
或
01/01/98 23:59:59.991 1998-01-01 23:59:59.990
Microsoft® SQL Server™
拒
绝
所有其不能
识别为
1753
年到
9999
年
间
的日期的
值
。
smalldatetime
从
1900
年
1
月
1
日到
2079
年
6
月
6
日的日期和
时间
数据精确到分
钟
。
29.998
秒或更低的
smalldatetime
值
向下舍入
为
最接近的分
钟
,
29.999
秒或更高的
smalldatetime
值
向上舍入
为
最接近的分
钟
。
--returns time as 12:35
SELECT CAST('2000-05-08 12:35:29.998' AS smalldatetime)
GO
--returns time as 12:36
SELECT CAST('2000-05-08 12:35:29.999' AS smalldatetime)
GO
注
释
Microsoft SQL Server 用两个 4 字
节
的整数内部存
储
datetime
数据
类
型的
值
。第一个 4 字
节
存
储
base date
(即 1900 年 1 月 1 日)之前或之后的天数。基
础
日期是系
统
参考日期。不允
许
早于 1753 年 1 月 1 日的 datetime
值
。
另外一个
4
字
节
存
储
以午夜后毫秒数所代表的
每
天的
时间
。
smalldatetime
数据
类
型存
储
日期和
每
天的
时间
,但精确度低于
datetime
。
SQL Server
将
smalldatetime
的
值
存
储为
两个
2
字
节
的整数。第一个
2
字
节
存
储
1900
年
1
月
1
日后的天数。另外一个
2
字
节
存
储
午夜后的分
钟
数。日期范
围
从
1900
年
1
月
1
日到
2079
年
6
月
6
日,精确到分
钟
。
字符串
char
和
varchar
固定
长
度
(char)
或可
变长
度
(varchar)
字符数据
类
型。
char[(n)]
长
度
为
n
个字
节
的固定
长
度且非
Unicode
的字符数据。
n
必
须
是一个介于
1
和
8,000
之
间
的数
值
。存
储
大小
为
n
个字
节
。
char
在
SQL-92
中的同
义词为
character
。
varchar[(n)]
长
度
为
n
个字
节
的可
变长
度且非
Unicode
的字符数据。
n
必
须
是一个介于
1
和
8,000
之
间
的数
值
。存
储
大小
为输
入数据的字
节
的
实际长
度,而不是
n
个字
节
。所
输
入的数据字符
长
度可以
为
零。
varchar
在
SQL-92
中的同
义词为
char varying
或
character varying
。
注
释
如果没有在数据定
义
或
变
量声明
语
句中指定
n
,
则
默
认长
度
为
1
。如果没有使用
CAST
函数指定
n
,
则
默
认长
度
为
30
。
将
为
使用
char
或
varchar
的
对
象被指派数据
库
的默
认
排序
规则
,除非用
COLLATE
子句另外指派了特定的排序
规则
。
该
排序
规则
控制用于存
储
字符数据的代
码页
。
支持多
语
言的站点
应
考
虑
使用
Unicode nchar
或
nvarchar
数据
类
型以尽量减少字符
转换问题
。如果使用
char
或
varchar
:
如果希望列中的数据
值
大小接近一致,
请
使用
char
。
如果希望列中的数据
值
大小
显
著不同,
请
使用
varchar
。
如果
执
行
CREATE TABLE
或
ALTER TABLE
时
SET ANSI_PADDING
为
OFF
,
则
一个定
义为
NULL
的
char
列将被作
为
varchar
处
理。
当排序
规则
代
码页
使用双字
节
字符
时
,存
储
大小仍然
为
n
个字
节
。根据字符串的不同,
n
个字
节
的存
储
大小可能小于
n
个字符。
ntext
可
变长
度
Unicode
数据,其最大
长
度
为
2^30 - 1 (1,073,741,823)
个字符。(
请
参
见
ntext
、
text
和
image
。)
ntext
、
text
和
image
用于存
储
大型非
Unicode
字符、
Unicode
字符及二
进
制数据的固定
长
度和可
变长
度数据
类
型。
Unicode
数据使用
UNICODE UCS-2
字符集。
ntext
可
变长
度
Unicode
数据的最大
长
度
为
230 - 1 (1,073,741,823)
个字符。存
储
大小是所
输
入字符个数的两倍(以字
节为单
位)。
ntext
在
SQL-92
中的同
义词
是
national text
。
text
服
务
器代
码页
中的可
变长
度非
Unicode
数据的最大
长
度
为
231-1 (2,147,483,647)
个字符。当服
务
器代
码页
使用双字
节
字符
时
,存
储
量仍是
2,147,483,647
字
节
。存
储
大小可能小于
2,147,483,647
字
节
(取决于字符串)。
image
可
变长
度二
进
制数据介于
0
与
231-1 (2,147,483,647)
字
节
之
间
。
二
进
制字符串
binary
和
varbinary
固定
长
度
(binary)
的或可
变长
度
(varbinary)
的
binary
数据
类
型。
binary [ ( n ) ]
固定
长
度的
n
个字
节
二
进
制数据。
N
必
须
从
1
到
8,000
。存
储
空
间
大小
为
n+4
字
节
。
varbinary [ ( n ) ]
n
个字
节变长
二
进
制数据。
n
必
须
从
1
到
8,000
。存
储
空
间
大小
为实际输
入数据
长
度
+4
个字
节
,而不是
n
个字
节
。
输
入的数据
长
度可能
为
0
字
节
。在
SQL-92
中
varbinary
的同
义词为
binary varying
。
image
可
变长
度的二
进
制数据,其最大
长
度
为
2^31 - 1 (2,147,483,647)
个字
节
。(
请
参
见
ntext
、
text
和
image
。)
注
释
如果在数据定
义
或
变
量声明
语
句中没有指定
n
,默
认长
度
为
1
。如果没有用
CAST
函数指定
n
,默
认长
度
为
30
。
当列数据
项
大小一致
时应
使用
binary
。
当列数据
项
大小不一致
时应
使用
varbinary
。
其它数据
类
型
cursor
这
是
变
量或存
储过
程
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
支持的各
种
数据
类
型(text、ntext、image、timestamp 和 sql_variant 除外)
值
的数据
类
型。
sql_variant 可以用在列、参数和
变
量中并返回用
户
定
义
函数的
值
。sql_variant 允
许这
些数据
库对
象支持其它数据
类
型的
值
。
语
法
sql_variant
注
释
sql_variant
类
型的列可以包含不同数据
类
型的行。例如,定
义为
sql_variant
的列可以存
储
int
、binary 和 char
值
。不能使用 sql_variant 存
储
的
值类
型只有 text、ntext、image、timestamp 和 sql_variant。
sql_variant 的最大
长
度可达 8016 字
节
。
必
须
先将 sql_variant 数据
类
型投影
为
其基本数据
类
型
值
,才能使其参与加和减
这类
运算。
可以
给
sql_variant
赋
一个默
认值
。
该
数据
类
型
还
可以将
NULL
作
为
其基
础值
,但是
NULL
值
没有
关联
的基本
类
型。另外,
sql_variant
还
可以不将其它
sql_variant
作
为
其基本
类
型。
UNIQUE
、主
键
或外
键
可以包含
sql_variant
类
型列,但是包含
给
定行
键
的数据
值总长
度不
应
大于索引的最大
长
度(目前是
900
字
节
)。
表可以有任意多个
sql_variant
列。
sql_variant
不能在
CONTAINSTABLE
和
FREETEXTTABLE
中使用。
ODBC
不完全支持
sql_variant
。因此,当使用用于
ODBC
的
Microsoft OLE DB
提供程序
(MSDASQL)
时
,
sql_variant
列的
查询
作
为
二
进
制数据返回。例如,包含字符串数据
'PS2091'
的
sql_variant
列作
为
0x505332303931
返回。
table
一
种
特殊的数据
类
型,用于存
储结
果集以供后
续处
理。
该
数据
类
型主要用于
临时
存
储
一
组
行,
这
些行将作
为
表
值
函数的
结
果集返回。
注
释
可将函数和
变
量声明
为
table
类
型。
table
变
量可用于函数、存
储过
程和批
处
理中。
尽可能使用表
变
量而不使用
临时
表。
table
变
量有以下
优
点:
table
变
量的行
为类
似于局部
变
量,有明确定
义
的作用域。
该
作用域
为
声明
该变
量的函数、存
储过
程或批
处
理。
在其作用域内,
table
变
量可像常
规
表那
样
使用。
该变
量可
应
用于
SELECT
、
INSERT
、
UPDATE
和
DELETE
语
句中用到表或表的表达式的地方。但是,
table
不能用在下列
语
句中:
INSERT INTO table_variable EXEC
存
储过
程。
SELECT select_list INTO table_variable
语
句。
在定
义
table
变
量的函数、存
储过
程或批
处
理
结
束
时
,自
动
清除
table
变
量。
在存
储过
程中使用表
变
量与使用
临时
表相比,减少了存
储过
程的重新
编译
量。
涉
及表
变
量的事
务
只在表
变
量更新期
间
存在。
这样
就减少了表
变
量
对锁
定和
记录资
源的需求。
不支持在表
变
量之
间进
行
赋值
操作。另外,由于表
变
量作用域有限,并且不是持久数据
库
的一部分,因而不受事
务
回
滚
的影响。
timestamp
timestamp
这种
数据
类
型表
现
自
动
生成的二
进
制数,确保
这
些数在数据
库
中是唯一的。
timestamp
一般用作
给
表行加版本戳的机制。存
储
大小
为
8
字
节
。
注
释
Transact-SQL timestamp
数据
类
型与在
SQL-92
标
准中定
义
的
timestamp
数据
类
型不同。
SQL-92 timestamp
数据
类
型等价于
Transact-SQL datetime
数据
类
型。
Microsoft® SQL Server™
将来的版本可能会修改
Transact-SQL timestamp
数据
类
型的行
为
,使它与在
标
准中定
义
的行
为
一致。到那
时
,当前的
timestamp
数据
类
型将用
rowversion
数据
类
型替
换
。
Microsoft® SQL Server™ 2000
引入了
timestamp
数据
类
型的
rowversion
同
义词
。在
DDL
语
句中尽可能使用
rowversion
而不使用
timestamp
。
rowversion
受数据
类
型同
义词
行
为
的制
约
。有
关
更多信息,
请
参
见
数据
类
型同
义词
。
在
CREATE TABLE
或
ALTER TABLE
语
句中,不必
为
timestamp
数据
类
型提供列名:
CREATE TABLE ExampleTable (PriKey int PRIMARY KEY, timestamp)
如果没有提供列名,
SQL Server
将生成
timestamp
的列名。
rowversion
数据
类
型同
义词
不具有
这样
的行
为
。指定
rowversion
时
必
须
提供列名。
一个表只能有一个
timestamp
列。
每
次插入或更新包含
timestamp
列的行
时
,
timestamp
列中的
值
均会更新。
这
一属性使
timestamp
列不适合作
为键
使用,尤其是不能作
为
主
键
使用。
对
行的任何更新都会更改
timestamp
值
,从而更改
键值
。如果
该
列属于主
键
,那
么
旧的
键值
将无效,
进
而引用
该
旧
值
的外
键
也将不再有效。如果
该
表在
动态
游
标
中引用,
则
所有更新均会更改游
标
中行的位置。如果
该
列属于索引
键
,
则对
数据行的所有更新
还
将
导
致索引更新。
不可
为
空的
timestamp
列在
语义
上等价于
binary(8)
列。可
为
空的
timestamp
列在
语义
上等价于
varbinary(8)
列。
uniqueidentifier
全局唯一
标识
符
(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
数据
类
型。
在 Microsoft® SQL Server™ 中, 每 个列、局部 变 量、表达式和参数都有一个相 关 的数据 类 型, 这 是指定 对 象可持有的数据 类 型(整型、字符、 money 等等)的特性。 SQL Server 提供系 统 数据 类 型集,定 义 了可与 SQL Server 一起使用的所有数据 类 型。下面列出系 统 提供的数据 类 型集。
可以定 义 用 户 定 义 的数据 类 型,其是系 统 提供的数据 类 型的 别 名。有 关 用 户 定 义 的数据 类 型的更多信息, 请 参 见 sp_addtype 和 创 建用 户 定 义 的数据 类 型。
当两个具有不同数据 类 型、排序 规则 、精度、小数位数或 长 度的表达式通 过 运算符 进 行 组 合 时 :
通 过 将数据 类 型的 优 先 顺 序 规则应 用到 输 入表达式的数据 类 型来确定所得 值 的数据 类 型。有 关 更多信息, 请 参 见 数据 类 型的 优 先 顺 序。
如果 结 果数据 类 型 为 char 、 varchar 、 text 、 nchar 、 nvarchar 或 ntext , 则结 果 值 的排序 规则 由排序 规则 的 优 先 顺 序 规则 决定。有 关 更多信息, 请 参 见 排序 规则 的 优 先 顺 序。
结 果的精度、小数位数及 长 度取决于 输 入表达式的精度、小数位数及 长 度。有 关 更多信息, 请 参 见 精度、小数位数和 长 度。
SQL Server 为 SQL-92 兼容性提供了数据 类 型同 义词 。有 关 更多信息, 请 参 见 数据 类 型同 义词 。 FcPw~ O ^
G?[1$nwww.tzsy.cn
精确数字
整数
int 、 bigint 、 smallint 和 tinyint
使用整数数据的精确数字数据 类 型。
bigint
从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存 储 大小 为 8 个字 节 。
int
从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字)。存 储 大小 为 4 个字 节 。 int 的 SQL-92 同 义 字 为 integer 。
smallint
从 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据。存 储 大小 为 2 个字 节 。
tinyint
从 0 到 255 的整型数据。存 储 大小 为 1 字 节 。
注 释
在支持整数 值 的地方支持 bigint 数据 类 型。但是, bigint 用于某些特殊的情况,当整数 值 超 过 int 数据 类 型支持的范 围时 ,就可以采用 bigint 。在 SQL Server 中, int 数据 类 型是主要的整数数据 类 型。
在数据 类 型 优 先次序表中, bigint 位于 smallmoney 和 int 之 间 。
只有当参数表达式是 bigint 数据 类 型 时 ,函数才返回 bigint 。 SQL Server 不会自 动 将其它整数数据 类 型( tinyint 、 smallint 和 int )提升 为 bigint 。
bit
整型数据 1 、 0 或 NULL 。
注 释
不能 对 bit 类 型的列使用索引。
Microsoft® SQL Server™ 优 化用于 bit 列的存 储 。如果一个表中有不多于 8 个的 bit 列, 这 些列将作 为 一个字 节 存 储 。如果表中有 9 到 16 个 bit 列, 这 些列将作 为 两个字 节 存 储 。更多列的情况依此 类 推。
decimal 和 numeric
带 定点精度和小数位数的 numeric 数据 类 型。
decimal[(p[, s])] 和 numeric[(p[, s])]
定点精度和小数位数。使用最大精度 时 ,有效 值 从 - 10^38 +1 到 10^38 - 1 。 decimal 的 SQL-92 同 义词 是 dec 和 dec(p, s) 。
p (精度)
指定小数点左 边 和右 边 可以存 储 的十 进 制数字的最大个数。精度必 须 是从 1 到最大精度之 间 的 值 。最大精度 为 38 。
s (小数位数)
指定小数点右 边 可以存 储 的十 进 制数字的最大个数。小数位数必 须 是从 0 到 p 之 间 的 值 。默 认 小数位数是 0 ,因而 0 <= s <= p 。最大存 储 大小基于精度而 变 化。
精度存 储 字 节 数
1 - 9 5
10-19 9
20-28 13
29-38 17
money 和 smallmoney
代表 货币 或 现 金 值 的 货币 数据 类 型。
money
货币 数据 值 介于 -2^63 (-922,337,203,685,477.5808) 与 2^63 - 1 (+922,337,203,685,477.5807) 之 间 ,精确到 货币单 位的千分之十。存 储 大小 为 8 个字 节 。
smallmoney
货币 数据 值 介于 -214,748.3648 与 +214.748,3647 之 间 ,精确到 货币单 位的千分之十。存 储 大小 为 4 个字 节 。
近似数字
float 和 real
用于表示浮点数字数据的近似数字数据 类 型。浮点数据 为 近似 值 ;并非数据 类 型范 围 内的所有数据都能精确地表示。
语 法
float [ ( n ) ]
从 - 1.79E + 308 到 1.79E + 308 之 间 的浮点数字数据。 n 为 用于存 储 科学 记 数法 float 数尾数的位数,同 时 指示其精度和存 储 大小。 n 必 须为 从 1 到 53 之 间 的 值 。
n 所在范 围 精度 存 储 大小
1-24 7 位数 4 字 节
25-53 15 位数 8 字 节
Microsoft® SQL Server™ float[(n)] 数据 类 型 对 于从 1 到 53 之 间 的所有 n 值 均符合 SQL-92 标 准。 double precision 的同 义词为 float(53) 。
real
从 ?3.40E + 38 到 3.40E + 38 之 间 的浮点数字数据。存 储 大小 为 4 字 节 。在 SQL Server 中, real 的同 义词为 float(24) 。
datetime 和 smalldatetime
代表日期和一天内的 时间 的日期和 时间 数据 类 型。
datetime
从 1753 年 1 月 1 日到 9999 年 12 月 31 日的日期和 时间 数据,精确度 为 百分之三秒(等于 3.33 毫秒或 0.00333 秒)。如下表所示,把 值调 整到 .000 、 .003 、或 .007 秒的增量。
示例 调 整后的示例
01/01/98 23:59:59.999 1998-01-02 00:00:00.000
01/01/98 23:59:59.995,
01/01/98 23:59:59.996,
01/01/98 23:59:59.997, 或
01/01/98 23:59:59.998 1998-01-01 23:59:59.997
01/01/98 23:59:59.992,
01/01/98 23:59:59.993,
01/01/98 23:59:59.994 1998-01-01 23:59:59.993
01/01/98 23:59:59.990 或
01/01/98 23:59:59.991 1998-01-01 23:59:59.990
Microsoft® SQL Server™ 拒 绝 所有其不能 识别为 1753 年到 9999 年 间 的日期的 值 。
smalldatetime
从 1900 年 1 月 1 日到 2079 年 6 月 6 日的日期和 时间 数据精确到分 钟 。 29.998 秒或更低的 smalldatetime 值 向下舍入 为 最接近的分 钟 , 29.999 秒或更高的 smalldatetime 值 向上舍入 为 最接近的分 钟 。
--returns time as 12:35
SELECT CAST('2000-05-08 12:35:29.998' AS smalldatetime)
GO
--returns time as 12:36
SELECT CAST('2000-05-08 12:35:29.999' AS smalldatetime)
GO
注 释
Microsoft SQL Server 用两个 4 字 节 的整数内部存 储 datetime 数据 类 型的 值 。第一个 4 字 节 存 储 base date (即 1900 年 1 月 1 日)之前或之后的天数。基 础 日期是系 统 参考日期。不允 许 早于 1753 年 1 月 1 日的 datetime 值 。 另外一个 4 字 节 存 储 以午夜后毫秒数所代表的 每 天的 时间 。
smalldatetime 数据 类 型存 储 日期和 每 天的 时间 ,但精确度低于 datetime 。 SQL Server 将 smalldatetime 的 值 存 储为 两个 2 字 节 的整数。第一个 2 字 节 存 储 1900 年 1 月 1 日后的天数。另外一个 2 字 节 存 储 午夜后的分 钟 数。日期范 围 从 1900 年 1 月 1 日到 2079 年 6 月 6 日,精确到分 钟 。
字符串
char 和 varchar
固定 长 度 (char) 或可 变长 度 (varchar) 字符数据 类 型。
char[(n)]
长 度 为 n 个字 节 的固定 长 度且非 Unicode 的字符数据。 n 必 须 是一个介于 1 和 8,000 之 间 的数 值 。存 储 大小 为 n 个字 节 。 char 在 SQL-92 中的同 义词为 character 。
varchar[(n)]
长 度 为 n 个字 节 的可 变长 度且非 Unicode 的字符数据。 n 必 须 是一个介于 1 和 8,000 之 间 的数 值 。存 储 大小 为输 入数据的字 节 的 实际长 度,而不是 n 个字 节 。所 输 入的数据字符 长 度可以 为 零。 varchar 在 SQL-92 中的同 义词为 char varying 或 character varying 。
注 释
如果没有在数据定 义 或 变 量声明 语 句中指定 n , 则 默 认长 度 为 1 。如果没有使用 CAST 函数指定 n , 则 默 认长 度 为 30 。
将 为 使用 char 或 varchar 的 对 象被指派数据 库 的默 认 排序 规则 ,除非用 COLLATE 子句另外指派了特定的排序 规则 。 该 排序 规则 控制用于存 储 字符数据的代 码页 。
支持多 语 言的站点 应 考 虑 使用 Unicode nchar 或 nvarchar 数据 类 型以尽量减少字符 转换问题 。如果使用 char 或 varchar :
如果希望列中的数据 值 大小接近一致, 请 使用 char 。
如果希望列中的数据 值 大小 显 著不同, 请 使用 varchar 。
如果 执 行 CREATE TABLE 或 ALTER TABLE 时 SET ANSI_PADDING 为 OFF , 则 一个定 义为 NULL 的 char 列将被作 为 varchar 处 理。
当排序 规则 代 码页 使用双字 节 字符 时 ,存 储 大小仍然 为 n 个字 节 。根据字符串的不同, n 个字 节 的存 储 大小可能小于 n 个字符。
ntext
可 变长 度 Unicode 数据,其最大 长 度 为 2^30 - 1 (1,073,741,823) 个字符。( 请 参 见 ntext 、 text 和 image 。)
ntext 、 text 和 image
用于存 储 大型非 Unicode 字符、 Unicode 字符及二 进 制数据的固定 长 度和可 变长 度数据 类 型。 Unicode 数据使用 UNICODE UCS-2 字符集。
ntext
可 变长 度 Unicode 数据的最大 长 度 为 230 - 1 (1,073,741,823) 个字符。存 储 大小是所 输 入字符个数的两倍(以字 节为单 位)。 ntext 在 SQL-92 中的同 义词 是 national text 。
text
服 务 器代 码页 中的可 变长 度非 Unicode 数据的最大 长 度 为 231-1 (2,147,483,647) 个字符。当服 务 器代 码页 使用双字 节 字符 时 ,存 储 量仍是 2,147,483,647 字 节 。存 储 大小可能小于 2,147,483,647 字 节 (取决于字符串)。
image
可 变长 度二 进 制数据介于 0 与 231-1 (2,147,483,647) 字 节 之 间 。
二 进 制字符串
binary 和 varbinary
固定 长 度 (binary) 的或可 变长 度 (varbinary) 的 binary 数据 类 型。
binary [ ( n ) ]
固定 长 度的 n 个字 节 二 进 制数据。 N 必 须 从 1 到 8,000 。存 储 空 间 大小 为 n+4 字 节 。
varbinary [ ( n ) ]
n 个字 节变长 二 进 制数据。 n 必 须 从 1 到 8,000 。存 储 空 间 大小 为实际输 入数据 长 度 +4 个字 节 ,而不是 n 个字 节 。 输 入的数据 长 度可能 为 0 字 节 。在 SQL-92 中 varbinary 的同 义词为 binary varying 。
image
可 变长 度的二 进 制数据,其最大 长 度 为 2^31 - 1 (2,147,483,647) 个字 节 。( 请 参 见 ntext 、 text 和 image 。)
注 释
如果在数据定 义 或 变 量声明 语 句中没有指定 n ,默 认长 度 为 1 。如果没有用 CAST 函数指定 n ,默 认长 度 为 30 。
当列数据 项 大小一致 时应 使用 binary 。
当列数据 项 大小不一致 时应 使用 varbinary 。
其它数据 类 型
cursor
这 是 变 量或存 储过 程 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 支持的各 种 数据 类 型(text、ntext、image、timestamp 和 sql_variant 除外) 值 的数据 类 型。
sql_variant 可以用在列、参数和 变 量中并返回用 户 定 义 函数的 值 。sql_variant 允 许这 些数据 库对 象支持其它数据 类 型的 值 。
语 法
sql_variant
注 释
sql_variant 类 型的列可以包含不同数据 类 型的行。例如,定 义为 sql_variant 的列可以存 储 int 、binary 和 char 值 。不能使用 sql_variant 存 储 的 值类 型只有 text、ntext、image、timestamp 和 sql_variant。
sql_variant 的最大 长 度可达 8016 字 节 。
必 须 先将 sql_variant 数据 类 型投影 为 其基本数据 类 型 值 ,才能使其参与加和减 这类 运算。
可以 给 sql_variant 赋 一个默 认值 。 该 数据 类 型 还 可以将 NULL 作 为 其基 础值 ,但是 NULL 值 没有 关联 的基本 类 型。另外, sql_variant 还 可以不将其它 sql_variant 作 为 其基本 类 型。
UNIQUE 、主 键 或外 键 可以包含 sql_variant 类 型列,但是包含 给 定行 键 的数据 值总长 度不 应 大于索引的最大 长 度(目前是 900 字 节 )。
表可以有任意多个 sql_variant 列。
sql_variant 不能在 CONTAINSTABLE 和 FREETEXTTABLE 中使用。
ODBC 不完全支持 sql_variant 。因此,当使用用于 ODBC 的 Microsoft OLE DB 提供程序 (MSDASQL) 时 , sql_variant 列的 查询 作 为 二 进 制数据返回。例如,包含字符串数据 'PS2091' 的 sql_variant 列作 为 0x505332303931 返回。
table
一 种 特殊的数据 类 型,用于存 储结 果集以供后 续处 理。 该 数据 类 型主要用于 临时 存 储 一 组 行, 这 些行将作 为 表 值 函数的 结 果集返回。
注 释
可将函数和 变 量声明 为 table 类 型。 table 变 量可用于函数、存 储过 程和批 处 理中。
尽可能使用表 变 量而不使用 临时 表。 table 变 量有以下 优 点:
table 变 量的行 为类 似于局部 变 量,有明确定 义 的作用域。 该 作用域 为 声明 该变 量的函数、存 储过 程或批 处 理。
在其作用域内, table 变 量可像常 规 表那 样 使用。 该变 量可 应 用于 SELECT 、 INSERT 、 UPDATE 和 DELETE 语 句中用到表或表的表达式的地方。但是, table 不能用在下列 语 句中:
INSERT INTO table_variable EXEC 存 储过 程。
SELECT select_list INTO table_variable 语 句。
在定 义 table 变 量的函数、存 储过 程或批 处 理 结 束 时 ,自 动 清除 table 变 量。
在存 储过 程中使用表 变 量与使用 临时 表相比,减少了存 储过 程的重新 编译 量。
涉 及表 变 量的事 务 只在表 变 量更新期 间 存在。 这样 就减少了表 变 量 对锁 定和 记录资 源的需求。
不支持在表 变 量之 间进 行 赋值 操作。另外,由于表 变 量作用域有限,并且不是持久数据 库 的一部分,因而不受事 务 回 滚 的影响。
timestamp
timestamp 这种 数据 类 型表 现 自 动 生成的二 进 制数,确保 这 些数在数据 库 中是唯一的。 timestamp 一般用作 给 表行加版本戳的机制。存 储 大小 为 8 字 节 。
注 释
Transact-SQL timestamp 数据 类 型与在 SQL-92 标 准中定 义 的 timestamp 数据 类 型不同。 SQL-92 timestamp 数据 类 型等价于 Transact-SQL datetime 数据 类 型。
Microsoft® SQL Server™ 将来的版本可能会修改 Transact-SQL timestamp 数据 类 型的行 为 ,使它与在 标 准中定 义 的行 为 一致。到那 时 ,当前的 timestamp 数据 类 型将用 rowversion 数据 类 型替 换 。
Microsoft® SQL Server™ 2000 引入了 timestamp 数据 类 型的 rowversion 同 义词 。在 DDL 语 句中尽可能使用 rowversion 而不使用 timestamp 。 rowversion 受数据 类 型同 义词 行 为 的制 约 。有 关 更多信息, 请 参 见 数据 类 型同 义词 。
在 CREATE TABLE 或 ALTER TABLE 语 句中,不必 为 timestamp 数据 类 型提供列名:
CREATE TABLE ExampleTable (PriKey int PRIMARY KEY, timestamp)
如果没有提供列名, SQL Server 将生成 timestamp 的列名。 rowversion 数据 类 型同 义词 不具有 这样 的行 为 。指定 rowversion 时 必 须 提供列名。
一个表只能有一个 timestamp 列。 每 次插入或更新包含 timestamp 列的行 时 , timestamp 列中的 值 均会更新。 这 一属性使 timestamp 列不适合作 为键 使用,尤其是不能作 为 主 键 使用。 对 行的任何更新都会更改 timestamp 值 ,从而更改 键值 。如果 该 列属于主 键 ,那 么 旧的 键值 将无效, 进 而引用 该 旧 值 的外 键 也将不再有效。如果 该 表在 动态 游 标 中引用, 则 所有更新均会更改游 标 中行的位置。如果 该 列属于索引 键 , 则对 数据行的所有更新 还 将 导 致索引更新。
不可 为 空的 timestamp 列在 语义 上等价于 binary(8) 列。可 为 空的 timestamp 列在 语义 上等价于 varbinary(8) 列。
uniqueidentifier
全局唯一 标识 符 (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 数据 类 型。