SQLServer 提供了以下数据类型:
Binary(n),Varbinary(n)Char(n)Varchar(n)Nchar(n),Nvarchar(n),Datetime,Smalldatetime,Decimal(p,s),Numeric(p,s),Float(n),Real,Int,Smallint,Tinyint,Money,Smallmoney,Bit,Cursor,Sysname,Timestamp,Uniqueidentifier,Text,Image,Ntext,Sql_variant,table,xml
首先解释下定长度和变长度如:
char nchar是定长字符串类型,长度不够会自动以空格补齐,char(10)存储abc时,会加7个空格
varchar
和
nvarchar
是变长字符串类型
varchar
存储
abc
时,就为
abc
一、二进制数据类型:binary,varbinary,image
?
(1)Binary 数据类型既可以是固定长度的(Binary),也可以是变长度的。?? Binary(n)是n位定长的二进制数据。n 的取值范围是1 到 8000。占用 n + 4 个字节 (2)Varbinary(n)是n位变长度的二进制数据。n 的取值范围是1 到 8000。占用 n + 4个字节
(3)Image数据类型以位字符串存储,不是由SQLServe解释的,必须由应用程序来解释
例如,应用程序可以使用BMP、TIEF、GIF和JPEG 格式把数据存储在 Image 数据类型中
二、字符数据类型:Char,Varchar 和 Text
Char 和 varchar的n取值范围1-8000K,text的你取值范围可大于8000
?
三、Unicode 数据类型:Nchar,Nvarchar和Ntext
Nchar 和 nvarchar 最多可存储4000个字符,ntext可存储多于4000个字符
在 Unicode 标准中,包括了以各种字符集定义的全部字符。Unicode数据类型,?所占用大小是非 Unicode 数据类型的两倍
四、日期和时间数据类型:datetime smalldatetime
使用Datetime存储的范围是从 1753 年 1 月 1 日 到9999 年12 月 31 日(每一个值要求 8 个存储字节)。?其精确度可达三百分之一秒 使用 Smalldatetime数据类型时,?存储的日期范围是 1900年 1 月 1日 到 2079 年 12 月 31 日(每一个值要求 4 个存储字节)。精度为1分钟
日期的格式可以设定。设置日期格式的命令如下:?? Set DateFormat {format | @format _var|? 其中,format |@format_var 是日期的顺序。有效的参数包括 MDY、DMY、YMD、YDM、MYD 和 DYM。在默认情况下,日期格式为MDY。?? 例如,当执行 SetDateFormat YMD 之后,日期的格式为年 月 日 形式;? 当执行 SetDateFormat DMY 之后,日期的格式为日 月有年 形式
五、数字数据类型?? 数字数据只包含数字。数字数据类型包括正数和负数、小数(浮点数)和整数?? 整数由正整数和负整数组成
整数存储的数据类型是BigInt,Int,Smallint和 Tinyint。? (1)使用Bigint数据存储范围从 -9223372036854775808 到9223372036854775807(每个值要求8个字节中存储空间) 使用 Int 数据存储数据的范围是从 -2 147 483 648 到 2 147 483 647(每一个值要求4个字节存储空间)。? 使用 Smallint 数据类型时,存储数据的范围从 -32 768 到 32 767(每一个值要求2个字节存储空间)。? 使用Tinyint 数据类型时,存储数据的范围是从0 到255(每一个值要求1个字节存储空间)。??
(2)小数数据类型是Decimal[p,s] 和 Numeric[p,s]。数据所占的存储空间根据该数据的位数后的位数来确定。 p表示位数,s表示小数位数? 在SQL Server 中,近似小数数据的数据类型是 Float 和 Real。例如,三分之一这个分数记作3333333,当使用近似数据类型时能准确表示。因此,从系统中检索到的数据可能与存储在该列中数据不完全一样。
(3)Real:可以存储正的或者负的十进制数值,最大可以有位精确位数。它的存储范围从-3.40E-38~3.40E+38。每个Real类型的数据占用4个字节的存储空间
(4)Float:可以精确到第15位小数,其范围从-1.79E-308~1.79E+308。如果不指定Float数据类型的长度,它占用8个字节的存储空间。数据类型也可以写为(n)的形式,指定数据的精度,为1~15之间的整数值。当取1~7时,实际上是定义了一个类型的数据,系统用个字节存储它;当8~15时,系统认为其是类型,用个字节存储它
六、货币数据表示正的或者负的货币数量:Money 和 Smallmoney 。? 而Money数据类型占8个存储字节,Smallmoney 数据类型要占4个存储字节。
七、特殊数据类型:Timestamp、Bit 和 Uniqueidentifier。?? Timestamp 用于表示SQLServer 活动的先后顺序,以二进投影的格式表示。Timestamp 数据与插入数据或者日期和时间没有关系。?? Bit 由 1 或者 0 组成。当表示真或假、ON或OFF时,使用 Bit 数据类型。??? Uniqueidentifier 由 16 字节的十六进制数字组成,表示一个全局唯一的。? 当表的记录行要求唯一时,GUID是非常有用。例如,在客户标识号列使用这种数据类型可以区别不同的客户
八、其它数据类型
(1)Sql_variant:用于存储除文本、图形数据和Timestamp类型数据外的其他任何合法的SQL Server数据。此数据类型极大地方便了的开发工作。
(2)Table:用于存储对表或者视图处理后的结果集。这种新的数据类型使得变量可以存储一个表,从而使函数或过程返回查询结果更加方便、快捷。
(3)XML:可以存储XML数据的数据类型。利用它可以将实例存储在字段中或者类型的变量中。注意存储在中的数据不能超过2GB。
(4)Cursor:这是变量或存储过程OUTPUT参数的一种数据类型,这些参数包含对游标的引用。使用 Cursor数据类型创建的变量可以为空。注意:对于 CREATETABLE语句中的列,不能使用Cursor数据类型。
九、用户定义的数据类型?? 用户定义的数据类型基于在SQL Server中提供的数据类型。当几个表中必须存储同一种数据类型时,并且为保证这些列有相同的数据类型、长度和可空性时,可以使用用户定义的数据类型。? 例如,可定义一种称为 postal_code 的数据类型,它基于 Char 数据类型。?? 当创建用户定义的数据类型时,必须提供三个数:数据类型的名称、所基于的系统数据类型和数据类型的可空性。?? (1)创建用户定义的数据类型?? 创建用户定义的数据类型可以使用 Transact-SQL 语句。系统存储过程 sp_addtype 可以来创建用户定义的数据类型。其语法形式如下:?? sp_addtype{type},[,system_data_bype][,'null_type']? 其中,type 是用户定义的数据类型的名称。system_data_type 是系统提供的数据类型。 null_type 表示该数据类型是如何处理空值的,必须使用单引号引起来,例如'NULL'、'NOT NULL'或者'NONULL'。?? 例子:?? Use cust? Exec sp_addtype ssn,'Varchar(11)','Not Null'? 创建一个用户定义的数据类型 ssn,其基于的系统数据类型是变长为11 的字符,不允许空。?? 例子:?? Use cust? Exec sp_addtype birthday,datetime,'Null'? 创建一个用户定义的数据类型 birthday,其基于的系统数据类型是 DateTime,允许空。?? 例子:?? Use master? Exec sp_addtype telephone,'varchar(24),'Not Null'? Eexc sp_addtype fax,'varchar(24)','Null'? 创建两个数据类型,即 telephone 和 fax?? (2)删除用户定义的数据类型?? 当用户定义的数据类型不需要时,可删除。删除用户定义的数据类型的命令是 sp_droptype {'type'}。?? 例子:?? Use master? Exec sp_droptype 'ssn'? 注意:当表中的列还正在使用用户定义的数据类型时,或者在其上面还绑定有默认或者规则时,这种用户定义的数据类型不能删除。?? 本人补充一下:? ACCESS数据表中字段中如果有:数据类型“是/否”,当转为SQL SERVER数据表时,数据类型变为“bit”,当用VBA增加新记录时,如果该字段没有操作的话,则值为NULL,在SQLSER中,如果此字段为NULL,即使在表设计时允许该字段为空,但修改记录的任一字段也会出现上述“写入冲突”的现象。
解决方法一:在VBA增加记录时要把该记录的值转为0或1?
解决方法二:在SQLSEFVER中的重新设计表,使字段不允许空,且默认值为0,这样不用在程序中加入代码
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|