1
、精确数字类型
(1)
精确数字类型包括:
•
整数类型
;
•
Bit
(位类型)
;
•
Decimal
和
Numeric
(数值类型)
;
•
Money
和
SmallMoney
(货币类型)。
1
、精确数字类型
(2)
整数类型
:
整数类型是最常用的数据类型之一,它主要用来存储数值,可以直接进行数据
运算,而不必使用函数转换。整数类型包括以下四类:
(
1
)
Bigint
:
Bigint
数据类型可以存储从
(-9223372036854775808)
到
(9223372036854775807)
范围之间的所有整型数据。每个
Bigint
数据类型值存
储在
8
个字节中。
(
2
)
Int
(
Integer
):
Int
(或
integer
)数据类型可以存储从(
-2147483648
)
到(
2147483647
)范围之间的所有正负整数。每个
Int
数据类型值存储在
4
个字
节中。
(
3
)
Smallint
:可以存储从(
-32768
)到
32767
范围之间的所有正负整数。每
个
smallint
类型的数据占用
2
个字节的存储空间。
(
4
)
Tinyint
:可以存储从
0~255
范围之间的所有正整数。每个
tinyint
类型的数
据占用
1
个字节的存储空间。
1
、精确数字类型
(3)
位数据类型
•
Bit
称为位数据类型,其数据有两种取值:
0
和
1
,长度为
1
字节。在输入
0
以外
的其他值时,系统均把它们当
1
看待。这种数据类型常作为逻辑变量使用,用
来表示真、假或是、否等二值选择。
(4)Decimal
数据类型和
Numeric
数据类型
Decimal
数据类型和
Numeric
数据类型完全相同,它们可以提供小数所需要的实
际存储空间,但也有一定的限制,可以用
2~17
个字节来存储
-1038+1
到
1038-1
之间的固定精度和小数位的数字。也可以将其写为
Decimal
(
p
,
s
)的形式,
p
和
s
确定了精确的总位数和小数位。其中
p
表示可供存储的值的总位数,默认设
置为
18
;
s
表示小数点后的位数,默认设置为
0
。例如:
decimal
(
10
,
5
),表
示共有
10
位数,其中整数
5
位,小数
5
位。
1
、精确数字类型
(5)
货币数据类型
货币数据类型包括
Money
和
SmallMoney
两种:
(
1
)
Money
:用于存储货币值,存储在
money
数据类型中的数值
以一个正数部分和一个小数部分存储在两个
4
字节的整型值中,存
储范围为(
-9223372136854775808
)到
(
9223372136854775807
),精确到货币单位的千分之十。
(
2
)
Smallmoney
:与
money
数据类型类似,但范围比
money
数
据类型小,其存储范围为
-2147483468
到
2147483467
之间,精确
到货币单位的千分之十。
当为
money
或
smallmoney
的表输入数据时,必须在有效位置前
面加一个货币单位符号。
2
、近似数字类型
•
近似数字类型包括
Real
和
Float
两大类。
(
1
)
Real
:可以存储正的或者负的十进制数值,最大可以有
7
位
精确位数。它的存储范围从
-3.40E-38~3.40E+38
。每个
Real
类型
的数据占用
4
个字节的存储空间。
(
2
)
Float
:可以精确到第
15
位小数,其范围从
-1.79E-
308~1.79E+308
。如果不指定
Float
数据类型的长度,它占用
8
个
字节的存储空间。
Float
数据类型也可以写为
Float
(
n
)的形式,
n
指定
Float
数据的精度,
n
为
1~15
之间的整数值。当
n
取
1~7
时,
实际上是定义了一个
Real
类型的数据,系统用
4
个字节存储它;
当
n
取
8~15
时,系统认为其是
Float
类型,用
8
个字节存储它。
3.
日期和时间数据类型
(
1
)
Datetime
:用于存储日期和时间的结合体,它可以存储从公元
1753
年
1
月
1
日零时起
~
公元
9999
年
12
月
31
日
23
时
59
分
59
秒之间的所有日期和时间,其
精确度可达三百分之一秒,即
3.33
毫秒。
Datetime
数据类型所占用的存储空间
为
8
个字节,其中前
4
个字节用于存储基于
1900
年
1
月
1
日之前或者之后日期数,
数值分正负,负数存储的数值代表在基数日期之前的日期,正数表示基数日期
之后的日期,时间以子夜后的毫秒存储在后面的
4
个字节中。当存储
Datetime
数据类型时,默认的格式是
MM DD YYYY hh:mm A.M./P.M
,当插入数据或者
在其他地方使用
Datetime
类型时,需要用单引号把它括起来。默认的时间日期
是
January 1,1900 12:00 A.M
。可以接受的输入格式如下:
Jan 4 1999
、
JAN
4 1999
、
January 4 1999
、
Jan 1999 4
、
1999 4 Jan
和
1999 Jan 4
。
(
2
)
Smalldatetime
:与
Datetime
数据类型类似,但其日期时间范围较小,它
存储从
1900
年
1
月
1
日
~2079
年
6
月
6
日内的日期。
SmallDatetime
数据类型使用
4
个字节存储数据,
SQL Server 2000
用
2
个字节存储日期
1900
年
1
月
1
日以后的
天数,时间以子夜后的分钟数形式存储在另外两个字节中,
SmallDatetime
的
精度为
1
分钟。
4.
字符数据类型
•
字符数据类型也是
SQL Server
中最常用的数据类型之一,它可以用来存储各种字母、
数字符号和特殊符号。在使用字符数据类型时,需要在其前后加上英文单引号或者双引
号。
(
1
)
Char
:其定义形式为
Char
(
n
),当用
Char
数据类型存储数据时,每个字符和符
号占用一个字节的存储空间。
n
表示所有字符所占的存储空间,
n
的取值为
1~8000
。若
不指定
n
值,系统默认
n
的值为
1
。若输入数据的字符串长度小于
n
,则系统自动在其后添
加空格来填满设定好的空间;若输入的数据过长,将会截掉其超出部分。如果定义了一
个
Char
数据类型,而且允许该列为空,则该字段被当作
Varchar
来处理。
(
2
)
Varchar
:其定义形式为
Varchar
(
n
)。用
Char
数据类型可以存储长达
255
个字
符的可变长度字符串,和
Char
类型不同的是
Varchar
类型的存储空间是根据存储在表的
每一列值的字符数变化的。例如定义
Varchar
(
20
),则它对应的字段最多可以存储
20
个字符,但是在每一列的长度达到
20
字节之前系统不会在其后添加空格来填满设定好的
空间,因此使用
Varchar
类型可以节省空间。
(
3
)
Text
:用于存储文本数据,其容量理论上为
1~231-1
(
2
,
147
,
483
,
647
)个字
节,但实际应用时要根据硬盘的存储空间而定。
5. Unicode
字符数据类型
•
Unicode
字符数据类型包括
Nchar
、
Nvarchar
、
Ntext
三种:
(
1
)
Nchar
:其定义形式为
Nchar
(
n
)。它与
Char
数据类型类似,不同的是
Nchar
数据类型
n
的取值为
1~4000
。
Nchar
数据类型采用
Unicode
标准字符
集,
Unicode
标准用两个字节为一个存储单位,其一个存储单位的容纳量就大
大增加了,可以将全世界的语言文字都囊括在内,在一个数据列中就可以同时
出现中文、英文、法文等,而不会出现编码冲突。
(
2
)
Nvarchar
:其定义形式
Nvarchar
(
n
)。它与
Varchchar
数据类型相
似,
Nvarchar
数据类型也采用
Unicode
标准字符集,
n
的取值范围为
1~4000
。
(
3
)
Ntext
:与
Text
数据类型类似,存储在其中的数据通常是直接能输出到显
示设备上的字符,显示设备可以是显示器、窗口或者打印机。
Ntext
数据类型采
用
Unicode
标准字符集,因此其理论上的容量为
230-1
(
1
,
073
,
741
,
823
)
个字节。
6.
二进制字符数据类型
•
二进制数据类型包括
Binary
、
Varbinary
、
Image
三种:
(
1
)
Binary
:其定义形式为
Binary
(
n
),数据的存储长度是固
定的,即
n+4
个字节,当输入的二进制数据长度小于
n
时,余下部
分填充
0
。二进制数据类型的最大长度(即
n
的最大值)为
8000
,
常用于存储图像等数据。
(
2
)
Varbinary
:其定义形式为
Varbinary
(
n
),数据的存储长
度是变化的,它为实际所输入数据的长度加上
4
字节。其他含义同
Binary
。
(
3
)
Image
:用于存储照片、目录图片或者图画,其理论容量为
231-1
(
2
,
147
,
483
,
647
)个字节。其存储数据的模式与
Text
数据类型相同,通常存储在
Image
字段中的数据不能直接用
Insert
语句直接输入。
7.
其它数据类型
(
1
)
Sql_variant
:用于存储除文本、图形数据和
Timestamp
类型数据外的其他任何合法的
SQL
Server
数据。此数据类型极大地方便了
SQL Server
的开发工作。
(
2
)
Table
:用于存储对表或者视图处理后的结果集。这种新的数据类型使得变量可以存储一个
表,从而使函数或过程返回查询结果更加方便、快捷。
(
3
)
Timestamp
:亦称时间戳数据类型,它提供数据库范围内的惟一值,反应数据库中数据修改
的相对顺序,相当于一个单调上升的计数器。当它所定义的列在更新或者插入数据行时,此列的值
会被自动更新,一个计数值将自动地添加到此
Timestamp
数据列中。如果建立一个名为
“
Timestamp
”
的列,则该列的类型将自动设为
Timestamp
数据类型。
(
4
)
Uniqueidentifier
:用于存储一个
16
字节长的二进制数据类型,它是
SQL Server
根据计算机
网络适配器地址和
CPU
时钟产生的全局惟一标识符代码(
Globally Unique Identifier
,简写为
GUID
)。此数字可以通过调用
SQL Server
的
newid
()函数获得,在全球各地的计算机经由此函
数产生的数字不会相同。
(
5
)
XML
:可以存储
XML
数据的数据类型。利用它可以将
XML
实例存储在字段中或者
XML
类型
的变量中。注意存储在
XML
中的数据不能超过
2GB
。
(
6
)
Cursor
:这是变量或存储过程
OUTPUT
参数的一种数据类型,这些参数包含对游标的引
用。使用
Cursor
数据类型创建的变量可以为空。注意:对于
CREATE TABLE
语句中的列,不能
使用
Cursor
数据类型。
用户自定义数据类型
•
SQL Server
允许用户自定义数据类型,用户自定义数
据类型是建立在
SQL Server
系统数据类型基础上的,当
用户定义一种数据类型时,需要指定该类型的名称、建
立在其上的系统数据类型以及是否允许为空等。
•
SQL Server
为用户提供了两种方法来创建自定义数据
类型:
(
1
)
使用
SQL Server
管理平台创建用户自定义数据类
型;
(
2
)利用系统存储过程创建用户自定义数据类型
(
1
)
使用
SQL Server
管理平台创建用户自定义数据类型
(
2
)
利用系统存储过程创建用户自定义数据类型
•
系统存储过程
sp_addtype
为用户提供了用
T_SQL
语句
创建自定义数据类型的途径,其语法形式如下:
sp_addtype [@typename=] type,
[@phystype=] system_data_type
[, [@nulltype=]
‘
null_type
’
]
[, [@owner=] ‘owner_name’]
(
2
)
利用系统存储过程创建用户自定义数据类型
•
例
5-1
自定义一个地址(
address
)数据类型。
程序清单如下:
exec sp_addtype address,
‘
varchar
(
80
)
’, ‘not
null
’