T-SQL中的数据类型主要学习T-SQL的数据类型:数值型数据类型,字符型数据类型,临时数据类型,混合型数据类型,附带有VARDECIMAL的DECIMAL存储类型。1、数值数据类型数值数据类型用于代表数据。具体看下表:数据类型详细说明INTEGER表示能够用4个字节保存的整数值,范围包括-2,147,483,648(-2~31)至2,147,483,647(2~31-1)。INT是INTEGER的缩写形式。SMALLINT表示能够用2个字节保存的整数值,范围从-32768(-2~16)至32767(2~16-1)。TINYINT表示能够用1个字节保存的,零以上的整数值,范围为0至255BIGINT表示能够用8个字节保存的整数值。范围为-2~63至2~63-1DECIMAL(p,[s])描述定点直。p(精确度)指定数字个数和假定的小数点s(刻度)数字。DECIMAL值可以用5-17个字节保存,由p值决定字节个数。DEC为DECIMAL的缩写。NUMERIC(p,[s])和DECIMAL相同。REAL适用于浮点值。包括正数值和负数值。正数值范围大约为2.23E-308至1..79E+308,负数值为-1.18E-38至-1.18E+38。FLOAT[(p)]表示浮点值,如REAL。p定义精确度,即p25表示单精度(4个字节),p=25为双倍精密度(8个字节)。MONEY表示币值。MONEY值和8字节的DECIMAL值一样。都是小数点后4个数字。SMALLMONEY和MONEY数据类型一样,只是用4个字节保存。2、字符型数据类型字符型数据类型用两种普通形式。它们可以是单字节的字符串,还可以使Unicode字符串。此外,字符串有固定或可变长度。具体看下表:数据类型说明CHAR[(n)]表示单字节,有固定长度的字符创,其中n为字符串内的字符个数。n的最大值为8000。如果省略了n,那么字符串的长度就假定为1。VARCHAR[(n)]表示单字节的字符可变长度的字符串(0n=8000)。和CHAR数据类型相反,VARCHAR数据值能够在它的实际长度中保存。NCHAR[(n)]保存固定长度的Unicode字符。CHAR和NCHAR数据类型之间最主要的区别为NCHAR数据类型的每个字符都可以用2个字节保存。而CHAR数据类型的每个字符只用1个字节的存储空间。因此,NCHAR列中字符的个数最多维4000。NVARCHAR[(n)]保存具有可变长度的Unicode字符串。VARCHAR和NVARCHAR数据类型之间的最主要区别为每个NVARCHAR字符都能用2个字节保存。而VARCHAR字符只用1个字节的存储空间。NVARCHAR列中的字符个数最多为4000。注:VARCHAR数据类型和CHAR数据类型基本一样,只有一点不同,如果一个CHAR(n)字符串比n个字符要短,那么其余的字符串就会用空格来填充。VARCHAR数据类型经常用数据长度存储。3、临时数据类型T-SQL支持的临时数据类型有:DATETIME、SMALLDATETIME、DATE、TIME、DATETIME2和DETETINEOFFSET。DATETIME和SMALLDATETIME数据类型指定日期和时间,每个值都为整数并分别用4个字节或2个字节保存。DATETIME和SMALLDATETIME的值是作为两个单独的数值保存的。DATETIME日期值的范围为01/01/1900至12/31/9999。SMALLDATETIME相应的值为01/01/1900至06/06/2079。时间部分能够再用4个字节或2个字节保存。它表示午夜过后的一秒的三百分之一(DATETIME)或分钟(SMALLDATETIME)。如果只想保存日期或时间部分,那么使用DATETIME和SMALLDATETIME非常不方便。SQLSERVER2008新增新的数据类型:DATE和TIME,这两种数据类型只能分别保存DATATIME数据的DATA或TIME部分。DATE数据类型用3个字节的保存并且范围为01/01/0001至12/31/9999。TIME数据类型用3-5个字节保存,且精确到100ns。DATETIME2数据类型也是一种新的数据类型,用于保存精度度很高的日期和时间数据。这种数据类型能够根据要求定义可变长度。存储大小为6-8个字节。时间部分的精确度为100ns。4、混合型数据类型T-SQL的混合数据类型有:Binary,BIT,大对象数据类型,CURSOR,UNIQUEIDENTIFIER,SQL_VARTANT,TABLE,XML,Spatial,HIERARCHYID,TIMESTAMP和自定义数据类型。4.1BINARY和BITBINARY和VARBINARY数据类型是两种二进制的数据类型。它们表示系统内部格式的数据对象。它们用来存储位串,因此这些值都是十六进制的数字。数据类型详细说明BINARY[(n)]指定有固定长度和n个字节的位串(0n=8000)VARBINARY[(n)]指定一个为串的可变长度,最高值为n个字节(0n=8000)BIT用于指定Boolean数据类型,它包含三个值:TRUE,FALSE和NULL。4.2大对象数据类型大对象就是最大长度为2GB的数据对象。这些数据对象一般用来存储大型的文本数据、加载模块和音频/视频文件。T-SQL支持两种不同的指定和访问方式:使用VARCHAR(MAX),NVARCHAR(MAX)和VARBINARY(MAX)的数据类型;使用所谓的文本和图像数据类型。TEXT、NTEXT和IMAGE数据类型组成了所谓的文本/图像数据类型。IMAGE类型的数据对象包含所有的数据(下载模块、音频/视频),而TEXT和NTEXT数据类型的数据对象包含文本数据。文本/图像数据类型和数据库的其他值区别保存默认值,存储方式为使用指向该数据字段的B-树型结构。而对于含有文本/图像数据类型的列来说,在数据行中存储了16字节的指示器,指定能找到数据的地方。如果文本/图像数据小于32KB,指示器就指向了B-树型结构中的根部节点,该节点长度约为84字节。根部节点指向数据的物理模块。如果数据总量大于32KB,DatabaseEngine就会在数据模块和根部节点建立中间节点。由于每个表都包含一个以上的有这种数据的列,列中的所有值都存储在一起。然而,一个物理页面能只包含单个表中的文本/图像数据。文本/图像数据类型有很多局限性。不能把他们当作本地变量。它们也不能作为索引的一部分,不能用在WHERE、ORDERBY和GROUPBY的子句中。有些时候可以使用VARCHAR(MAX),NVARCHAR(MAX)和VARBINARY(MAX)来代替文本/图像数据类型。4.3CURSOR4.4UNIQUEIDENTIFIERUNIQUEIDENTIFIER数据类型值是唯一辨别数字,它是用16个字节存储的二机制字符串,和全球唯一识别码密切相关,保证了在世界范围内的唯一性。因此,通过运用数据类型,可以在分布式的计算机中识别数据和对象。使用NEWID和NEWSEQUUENTIALID函数可以进行列或UNIQUEIDENTIFIER类型的变量初始化,并且字符串常量是用十六进制数字和连字符这种特殊格式书写的。4.5SQL_VARTANTSQL_VARIANT数据类型用于同时存储各种数据类型,如数值、字符串已经日期值等。只有TIMESTAMP类型值不能存储。SQL_VARIANT列中的每个值都有两个部分:日期值和描述值的信息。这些信息包含数据类型的所有属性,如长度、范围和精确度。4.6TABLE4.7XML4.8Spatial4.9HIERARCHYIDUNIQUEIDENTIFIER数据类型用于保存整个层面,它是作为CLR自定义数据安装的,包括一些层级节点上的创建和操作的系统函数:GetAncestor(),GetDescendant(),Read()和Wriite().4.10TIMESTAMPTIMESTAMP数据类型指定其中的一栏为VARBINARY(8)和BINARY(8),这是由列中的无效值决定的。系统包含每个数据库的当前值(不是日期或时间),这样在插入或更新含有TIMESTAMP列这样的行就会自动增加。4.11自定义数据类型5附带有VARDECIMAL的DECIMAL存储类型Vardecimal是一种存储格式,而不是数据类型。vardecimal存储格式可以大大减少数据的存储大小,但确实增加了少量CPU开销。vardecimal存储格式应用于表级别。也就是说,不能只将表中的某些decimal列存储为vardecimal存储格式而不将其他列存储为该格式。decimal数据将保持为本身的数据类型。