| 数据类型是数据的一种属性,表示数据所表示信息的类型。任何一种计算机语言都定义了自己的数据类型。当然,不同的程序语言都具有不同的特点,所定义的数据类型的各类和名称都或多或少有些不同。SQLServer提供了25种数据类型: ·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
 (1)二进制数据类型
 二进制数据包括Binary、Varbinary和Image
 Binary数据类型既可以是固定长度的(Binary),也可以是变长度的。
 Binary[(n)]是n位固定的二进制数据。其中,n的取值范围是从1到8000。其存储窨的大小是n+4个字节。
 Varbinary[(n)]是n位变长度的二进制数据。其中,n的取值范围是从1到8000。其存储窨的大小是n+4个字节,不是n个字节。
 在Image数据类型中存储的数据是以位字符串存储的,不是由SQLServer解释的,必须由应用程序来解释。例如,应用程序可以使用BMP、TIEF、GIF和JPEG格式把数据存储在Image数据类型中。
 (2)字符数据类型
 字符数据的类型包括Char,Varchar和Text
 字符数据是由任何字母、符号和数字任意组合而成的数据。
 Varchar是变长字符数据,其长度不超过8KB。Char是定长字符数据,其长度最多为8KB。超过8KB的ASCII数据可以使用Text数据类型存储。例如,因为Html文档全部都是ASCII字符,并且在一般情况下长度超过8KB,所以这些文档可以Text数据类型存储在SQLServer中。
 (3)Unicode数据类型
 Unicode数据类型包括Nchar,Nvarchar和Ntext
 在MicrosoftSQLServer中,传统的非Unicode数据类型允许使用由特定字符集定义的字符。在SQLServer安装过程中,允许选择一种字符集。使用Unicode数据类型,列中可以存储任何由Unicode标准定义的字符。在Unicode标准中,包括了以各种字符集定义的全部字符。使用Unicode数据类型,所战胜的窨是使用非Unicode数据类型所占用的窨大小的两倍。
 在SQLServer中,Unicode数据以Nchar、Nvarchar和Ntext数据类型存储。使用这种字符类型存储的列可以存储多个字符集中的字符。当列的长度变化时,应该使用Nvarchar字符类型,这时最多可以存储4000个字符。当列的长度固定不变时,应该使用Nchar字符类型,同样,这时最多可以存储4000个字符。当使用Ntext数据类型时,该列可以存储多于4000个字符。
 (4)日期和时间数据类型
 日期和时间数据类型包括Datetime和Smalldatetime两种类型
 日期和时间数据类型由有效的日期和时间组成。例如,有效的日期和时间数据包括“4/01/9812:15:00:00:00PM”和“1:28:29:15:01AM8/17/98”。前一个数据类型是日期在前,时间在后一个数据类型是霎时间在前,日期在后。在MicrosoftSQLServer中,日期和时间数据类型包括Datetime和Smalldatetime两种类型时,所存储的日期范围是从1753年1月1日开始,到9999年12月31日结束(每一个值要求8个存储字节)。使用Smalldatetime数据类型时,所存储的日期范围是1900年1月1日开始,到2079年12月31日结束(每一个值要求4个存储字节)。
 日期的格式可以设定。设置日期格式的命令如下:
 [email=SetDateFormat%7Bformat%7C@format_var]SetDateFormat{format|@format_var[/email]|
 其中,[email=format%7C@format_var]format|@format_var[/email]是日期的顺序。有效的参数包括MDY、DMY、YMD、YDM、MYD和DYM。在默认情况下,日期格式为MDY。
 例如,当执行SetDateFormatYMD之后,日期的格式为年月日形式;当执行SetDateFormatDMY之后,日期的格式为日月有年形式
 (5)数字数据类型
 数字数据只包含数字。数字数据类型包括正数和负数、小数(浮点数)和整数
 整数由正整数和负整数组成,例如39、25、0-2和33967。在MicrsoftSQLServer中,整数存储的数据类型是  Int,Smallint和Tinyint。Int数据类型存储数据的范围大于Smallint数据类型存储数据的范围,而Smallint据类型存储数据的范围大于Tinyint数据类型存储数据的范围。使用Int数据狗昔存储数据的范围是从-2147483648到2147483647(每一个值要求4个字节存储空间)。使用Smallint数据类型时,存储数据的范围从-32768到32767(每一个值要求2个字节存储空间)。使用Tinyint数据类型时,存储数据的范围是从0到255(每一个值要求1个字节存储空间)。
 精确小娄数据在SQLServer中的数据类型是Decimal和Numeric。这种数据所占的存储空间根据该数据的位数后的位数来确定。
 在SQLServer中,近似小数数据的数据类型是Float和Real。例如,三分之一这个分数记作。3333333,当使用近似数据类型时能准确表示。因此,从系统中检索到的数据可能与存储在该列中数据不完全一样。
 (6)货币数据表示正的或者负的货币数量。
 在MicrosoftSQLServer中,货币数据的数据类型是Money和Smallmoney
 Money数据类型要求8个存储字节,Smallmoney数据类型要求4个存储字节。
 (7)特殊数据类型
 特殊数据类型包括前面没有提过的数据类型。特殊的数据类型有3种,即  Timestamp、Bit和Uniqueidentifier。
 Timestamp用于表示SQLServer活动的先后顺序,以二进投影的格式表示。Timestamp数据与插入数据或者日期和时间没有关系。
 Bit由1或者0组成。当表示真或者假、ON或者OFF时,使用Bit数据类型。例如,询问是否是每一次访问的客户机请求可以存储在这种数据类型的列中。
 Uniqueidentifier由16字节的十六进制数字组成,表示一个全局唯一的。当表的记录行要求唯一时,GUID是非常有用。例如,在客户标识号列使用这种数据类型可以区别不同的客户。
 2.用户定义的数据类型
 用户定义的数据类型基于在MicrosoftSQLServer中提供的数据类型。当几个表中必须存储同一种数据类型时,并且为保证这些列有相同的数据类型、长度和可空性时,可以使用用户定义的数据类型。例如,可定义一种称为  postal_code的数据类型,它基于Char数据类型。
 当创建用户定义的数据类型时,必须提供三个数:数据类型的名称、所基于的系统数据类型和数据类型的可空性。
 (1)创建用户定义的数据类型
 创建用户定义的数据类型可以使用Transact-SQL语句。系统存储过程sp_addtype可以来创建用户定义的数据类型。其语法形式如下:
 sp_addtype{type},[,system_data_bype][,'null_type']
 其中,type是用户定义的数据类型的名称。system_data_type是系统提供的数据类型,例如Decimal、Int、Char  等等。null_type表示该数据类型是如何处理空值的,必须使用单引号引起来,例如'NULL'、'NOTNULL'或者'NONULL'。
 例子:
 Usecust
 Execsp_addtypessn,'Varchar(11)',"NotNull'
 创建一个用户定义的数据类型ssn,其基于的系统数据类型是变长为11的字符,不允许空。
 例子:
 Usecust
 Execsp_addtypebirthday,datetime,'Null'
 创建一个用户定义的数据类型birthday,其基于的系统数据类型是DateTime,允许空。
 例子:
 Usemaster
 Execsp_addtypetelephone,'varchar(24),'NotNull'
 Eexcsp_addtypefax,'varchar(24)','Null'
 创建两个数据类型,即telephone和fax
 (2)删除用户定义的数据类型
 当用户定义的数据类型不需要时,可删除。删除用户定义的数据类型的命令是sp_droptype{'type'}。
 例子:
 Usemaster
 Execsp_droptype'ssn'
 注意:当表中的列还正在使用用户定义的数据类型时,或者在其上面还绑定有默认或者规则时,这种用户定义的数据类型不能删除。
 SQLSERVER的字段类型说明
 以下为SQL SERVER7.0以上版本的字段类型说明。SQL SERVER6.5的字段类型说明请参考SQL SERVER提供的说明。
 
 
 [down=upload/images/618fmall2.rar]DOWN LOAD THE FILE[/down]| 字段类型 | 描述 |  | bit | 0或1的整型数字 |  | int | 从-2^31(-2,147,483,648)到2^31(2,147,483,647)的整型数字 |  | smallint | 从-2^15(-32,768)到2^15(32,767)的整型数字 |  | tinyint | 从0到255的整型数字 |  | 
 | 
 |  | decimal | 从-10^38到10^38-1的定精度与有效位数的数字 |  | numeric | decimal的同义词 |  | 
 | 
 |  | money | 从-2^63(-922,337,203,685,477.5808)到2^63-1(922,337,203,685,477.5807)的货币数据,最小货币单位千分之十 |  | smallmoney | 从-214,748.3648到214,748.3647的货币数据,最小货币单位千分之十 |  | 
 | 
 |  | float | 从-1.79E+308到1.79E+308可变精度的数字 |  | real | 从-3.04E+38到3.04E+38可变精度的数字 |  | 
 | 
 |  | datetime | 从1753年1月1日到9999年12日31的日期和时间数据,最小时间单位为百分之三秒或3.33毫秒 |  | smalldatetime | 从1900年1月1日到2079年6月6日的日期和时间数据,最小时间单位为分钟 |  | 
 | 
 |  | timestamp | 时间戳,一个数据库宽度的唯一数字 |  | uniqueidentifier | 全球唯一标识符GUID |  | 
 | 
 |  | char | 定长非Unicode的字符型数据,最大长度为8000 |  | varchar | 变长非Unicode的字符型数据,最大长度为8000 |  | text | 变长非Unicode的字符型数据,最大长度为2^31-1(2G) |  | 
 | 
 |  | nchar | 定长Unicode的字符型数据,最大长度为8000 |  | nvarchar | 变长Unicode的字符型数据,最大长度为8000 |  | ntext | 变长Unicode的字符型数据,最大长度为2^31-1(2G) |  | 
 | 
 |  | binary | 定长二进制数据,最大长度为8000 |  | varbinary | 变长二进制数据,最大长度为8000 |  | image | 变长二进制数据,最大长度为2^31-1(2G) | 
 天气:大雨,ccdot发表于2006-6-20 14:44:36,阅读了655次,共有个2回复.
 --语 句              功 能
 --数据操作
 SELECT   --从数据库表中检索数据行和列
 INSERT   --向数据库表添加新数据行
 DELETE   --从数据库表中删除数据行
 UPDATE   --更新数据库表中的数据
 --数据定义
 CREATE TABLE  --创建一个数据库表
 DROP TABLE   --从数据库中删除表
 ALTER TABLE   --修改数据库表结构
 CREATE VIEW   --创建一个视图
 DROP VIEW   --从数据库中删除视图
 CREATE INDEX  --为数据库表创建一个索引
 DROP INDEX   --从数据库中删除索引
 CREATE PROCEDURE  --创建一个存储过程
 DROP PROCEDURE  --从数据库中删除存储过程
 CREATE TRIGGER  --创建一个触发器
 DROP TRIGGER  --从数据库中删除触发器
 CREATE SCHEMA  --向数据库添加一个新模式
 DROP SCHEMA   --从数据库中删除一个模式
 CREATE DOMAIN  --创建一个数据值域
 ALTER DOMAIN  --改变域定义
 DROP DOMAIN   --从数据库中删除一个域
 --数据控制
 GRANT   --授予用户访问权限
 DENY   --拒绝用户访问
 REVOKE   --解除用户访问权限
 --事务控制
 COMMIT   --结束当前事务
 ROLLBACK   --中止当前事务
 SET TRANSACTION  --定义当前事务数据访问特征
 --程序化SQL
 DECLARE   --为查询设定游标
 EXPLAN   --为查询描述数据访问计划
 OPEN   --检索查询结果打开一个游标
 FETCH   --检索一行查询结果
 CLOSE   --关闭游标
 PREPARE   --为动态执行准备SQL 语句
 EXECUTE   --动态地执行SQL 语句
 DESCRIBE   --描述准备好的查询
 ---局部变量
 declare @id char(10)
 --set @id = ’10010001’
 select @id = ’10010001’
 
 ---全局变量
 ---必须以@@开头
 
 
 
 
 MSSQL常用汇总
 下列语句部分是Mssql语句,不可以在access中使用。
 
 SQL分类:
 DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)
 DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)
 DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)
 
 首先,简要介绍基础语句:
 1、说明:创建数据库
 CREATE DATABASE database-name
 2、说明:删除数据库
 drop database dbname
 3、说明:备份sql server
 --- 创建 备份数据的 device
 USE master
 EXEC sp_addumpdevice 'disk', 'testBack', 'c:mssql7backupMyNwind_1.dat'
 --- 开始 备份
 BACKUP DATABASE pubs TO testBack
 4、说明:创建新表
 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
 根据已有的表创建新表:
 A:create table tab_new like tab_old (使用旧表创建新表)
 B:create table tab_new as select col1,col2… from tab_old definition only
 5、说明:删除新表drop table tabname
 6、说明:增加一个列
 Alter table tabname add column col type
 注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
 7、说明:添加主键: Alter table tabname add primary key(col)
 说明:删除主键: Alter table tabname drop primary key(col)
 8、说明:创建索引:create [unique] index idxname on tabname(col….)
 删除索引:drop index idxname
 注:索引是不可更改的,想更改必须删除重新建。
 9、说明:创建视图:create view viewname as select statement
 删除视图:drop view viewname
 10、说明:几个简单的基本的sql语句
 选择:select * from table1 where 范围
 插入:insert into table1(field1,field2) values(value1,value2)
 删除:delete from table1 where 范围
 更新:update table1 set field1=value1 where 范围
 查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料!
 排序:select * from table1 order by field1,field2 [desc]
 总数:select count(*) as totalcount from table1
 求和:select sum(field1) as sumvalue from table1
 平均:select avg(field1) as avgvalue from table1
 最大:select max(field1) as maxvalue from table1
 最小:select min(field1) as minvalue from table1
 11、说明:几个高级查询运算词
 A: UNION 运算符
 UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
 B: EXCEPT 运算符
 EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
 C: INTERSECT 运算符
 INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
 注:使用运算词的几个查询结果行必须是一致的。
 12、说明:使用外连接
 A、left outer join:
 左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
 SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
 B:right outer join:
 右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
 C:full outer join:
 全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
 
 其次,大家来看一些不错的sql语句
 1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
 法一:select * into b from a where 1<>1
 法二:select top 0 * into b from a
 
 2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
 insert into b(a, b, c) select d,e,f from b;
 
 3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
 insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件
 例子:..from b in '"&Server.MapPath(".")&"data.mdb" &"' where..
 
 4、说明:子查询(表名1:a 表名2:b)
 select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)
 
 5、说明:显示文章、提交人和最后回复时间
 select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
 
 6、说明:外连接查询(表名1:a 表名2:b)
 select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
 
 7、说明:在线视图查询(表名1:a )
 select * from (SELECT a,b,c FROM a) T where t.a > 1;
 
 8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括
 select * from table1 where time between time1 and time2
 select a,b,c, from table1 where a not between 数值1 and 数值2
 
 9、说明:in 的使用方法
 select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)
 
 10、说明:两张关联表,删除主表中已经在副表中没有的信息
 delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
 
 11、说明:四表联查问题:
 select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....
 
 12、说明:日程安排提前五分钟提醒
 SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5
 
 13、说明:一条sql 语句搞定数据库分页
 select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段
 
 14、说明:前10条记录
 select top 10 * form table1 where 范围
 
 15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
 select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
 
 16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
 (select a from tableA ) except (select a from tableB) except (select a from tableC)
 
 17、说明:随机取出10条数据
 select top 10 * from tablename order by newid()
 
 18、说明:随机选择记录
 select newid()
 
 19、说明:删除重复记录
 Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
 
 20、说明:列出数据库里所有的表名
 select name from sysobjects where type='U'
 
 21、说明:列出表里的所有的
 select name from syscolumns where id=object_id('TableName')
 
 22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。
 select type,sum(case vender
 |