Transact-SQL的数据类型--我的第一篇总结

来源:互联网 发布:有趣的网站 知乎 编辑:程序博客网 时间:2024/06/04 18:31

 

       Transact-SQL语言是微软公司在关系型数据库管理系统Microsoft SQL Server中的ISO SQL的实现,通过使用Transact-SQL语言,我们几乎可以完成Microsoft SQL Server数据库中的所有操作。
        这篇笔记,我主要总结下Transact-SQL语言的数据类型,版本是Microsoft SQL Server 2005。
  在Microsoft SQL Server 2005 系统中,需要使用数据类型的对象包括表中的列、视图中的列、定义的局部变量、存储过程中的参数、Transact-SQL函数及存储过程的返回值等。
  Microsoft SQL Server 2005系统提供了28种数据类型。这些数据类型可以分为数字数据类型、字符数据类型、日期和时间数据类型、二进制数据类型以及其他数据类型。
一、 数字数据类型
  这些数据类型的数字就是可以参加各种数值运算,我们对从这些数字是否有小数,分为整数类型和小数类型;对这些数字的精度和位数是否可以明确地确定,分为精确数字类型和近似数字类型。对是否可以表示金额,分为货币数字类型和非货币数字类型。
  该类型包括:BIGINT、INT、SMALLINT、TINYINT、BIT DECIMAL、NUMERIC、MONEY、SMALLMONEY、FLOAT、REAL、BIT等11种数据类型。
1.      前四种数据类型是整数数据类型。BIGINT长度为8字节,可存储正负数,
取值范围-263至263-1;INT长度为4字节,可存储正负数,取值范围-231至231-1;SMALLINT长度2字节,可存储正负数,取值范围-215至215-1;当存储整数大小有限,且都是正数,则可以考虑TINYINT,该类型长度为1字节,取值范围0至255。
  选择哪个类型就要根据数据具体分析,对于某种整数数据类型,如果提供的数据超出其允许取值范围,则发生数据溢出错误。
2.      DECIMAL和NUMERIC都是带固定精度和位数的数据类型。二者在功能上是等价的,Microsoft SQL Server 2005系统中,把二者当同一种数据类型对待。所以只说一下DECIMAL数据类型。
  DECIMAL数据类型语法如下:
  DECIMAL(p,s)
  其中,p表示数字的精度,s表示数字的小数位数。P取值范围是1至38,默认值是18。S的取值范围必须是[0,p],所以DECIMAL的取值范围是-1038+1至1038-1。
  由于DECMAL数据类型的精度是变化的,因此该数据类型的长度是不定的,它会随着精度的变化而变化。
3.      MONEY和SMALLMONEY是一种确定性数值数据类型,用来存储代表货币数值的数据。MONEY需要耗费8字节,取值范围同BIGINT;SMALLMONEY只需要4个字节,取值范围同INT。那有人就会问了,既然有BIGINT和INT,为什么还定义MONEY和SMALLMONEY。这是因为:1.他们表示货币,可在数字前面加$作为货币符号,2.他们的小树位数最多是4位,表示货币单位的万分之一,3.当小数位数超过4时,自动按四舍五入进行处理。
4.      如果希望进行科学计算,并且希望存储更大的数值,但对数据的精度要求并不严格时,可以考虑FLOAT或REAL,二者都是近似数字类型。
  REAL取值范围是-3.40E+38至-1.18E-38、0、1.18E-38至3.40E+38,FLOAT取值范围是-1.79E+308至-2.21E-308、0、2.23E-308至1.79E+308。REAL长度为4字节。FLOAT类型是FLOAT(n)时,n最大值为53,默认也是53,则其长度为8字节。
5.      BIT可以存储1、0或NULL数据的数据类型。这些数据只要用于一些条件逻辑判断,将按字符格式存储。
二、 字符数据类型
字符数据类型用于存储固定长度或可变长度的字符数据。该类型包括:CHAR、VARCHAR、TEXT、NCHAR、NVARCHAR和NTEXT等6种数据类型。前3种数据类型是非Unicode字符数据,后3种是Unicode字符数据。
CHAR(n)存储固定长度的字符数据,长度为n,n的取值范围是1至8000。默认值为1。VARCHAR(n)存储可变长度的字符数据,n取值范围是1至8000。注意:VARCHAR(MAX)可以存储最大字节数位231-1的数据。其实VARCHAR(MAX)被称为大数值类型,可以代替TEXT数据类型,微软公司建议,用户应避免使用TEXT,而用VARCHAR(MAX)存储大文本数据。
字符数据通常使用单引号引起来。对于CHAR(n)类型,如果输入的字符小于指定的长度,则在该字符尾部用空格补齐。VARCHAR(n)则存储实际的字符长度。
当数据库存储的数据由可能涉及到多种语言时,应该使用Unicode数据类型。像CHAR、VARCHAR、TEXT一样,NCHAR、NVARCHAR分别用于存储固定长度和可变长度的Unicode字符数据。NTEXT是将要被取消的数据类型,可用NVARCHAR(MAX)代替。需要注意的是,Unicode字符常量常用下面方式表示:
N‘联想公司’
所以,如果某些列需要存储中文字符,最好使用NCHAR、NVARCHAR数据类型。同样IMAGE数据类型也应该由VARBINARY(MAX)代替。
三、 日期和时间数据类型
日期和时间数据类型就是存储日期和时间数据的,该类型包括:DATETIME和SMALLDATETIME两种数据类型。二者的差别是日期和时间范围不同、时间精确度不同。前者范围是1753年1月1日至9999年12月31日,时间精度3.33毫秒。后者范围是1990年1月1日至2079年12月31日,时间精度1分钟。建议不要使用SMALLDATETIME,因为毕竟2079年不是一个特别遥远的日期。当心“千年虫”问题哦~
四、 二进制数据类型
  该类型包括:BINARY、VARBINARY、IMAGE等3种数据类型。用于存储二进制数据。二者长度由n值确定,取值范围是1至8000。IMAGE用于存储图像信息。BINARY和VARBINARY默认值均为1。当二进制数据存储到表中时,可用SELECT语句检索,不过,结果是以16进制数据格式显示的。
五、 其他数据类型
除此之外,还包括CURSOR、SQL_VARIANT、TABLE、TIMESTAMP、UNIQUEIDENTIFIER和XML等6种数据类型。
CURSOR是变量或存储过程的输出参数使用的一种数据类型,称其为游标。它提供一种逐行处理查询数据的功能。它只能用于与定义游标和使用游标的有关语句中,不能呢个在诸如CREATE TABLE语句中使用。
SQL_VARIANT是一种特殊的数据类型,可以存储大部分Microsoft SQL Server 2005中的数据类型(不包括TEXT、NTEXT、IMAGE、TIMESTAMP、SQL_VARIANT)的值。该数据类型可以用在列、变量、用户定义函数等返回值中。它不仅包括数据,也包含该数据的类型值信息,所以其最大存储长度为8016字节。一般只是在不能确定将要存储的数据类型时,才使用该数据类型。
TABLE用于存储结果集以便今后继续处理,这些结果集往往通过表值函数返回。如果变量或函数声明为TABLE类型,在其作用范围内可当表一样使用。但如果其包含的数据量很大时,会对系统的性能造成影响。
TIMESTAMP是一个特殊的用于表示先后顺序的时间戳数据类型,它可为表中数据行加上一个版本戳,当对包含TIMESTAMP列的表执行插入或更新操作时,数据库自带的计数器就会增加。注意,一个表最多只能有一个TIMESTAMP列。大家可以用@@DBTS函数返回数据库的时戳值。
UNIQUEIDENTIFIER是一个具有16字节的全局唯一性标志符,用来确保对象的唯一性。其主要目的是在合并复制和事务复制中确保数据行的唯一性。对其初始化有两种方式:1.使用NEWID函数,2.使用如下格式的字符串常量,每一个X都是0-9或a-f范围内的16进制数据:
XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
XML是Microsoft SQL Server 2005系统新增的数据类型,用于存储XML数据。存储XML数据类型的数据实例最大值为2GB。
好了,由于刚入门,就先总结到这里,毕竟路途还很漫长,但只要坚持下去就一定能掌握好。下次就总结一下Microsoft SQL Server 2005系统中的内置函数吧!