--------------------创建文件包 exec sp_configure'show advanced options',1 RECONFIGURE exec sp_configure'xp_cmdshell',1 RECONFIGURE exec xp_cmdshell 'md d:\project' go use master go --创建bbsDB数据库 if exists(select name from sysdatabases where name='bbsDB') drop database bbsDB go create database bbsDB on ( name='bbsDB', filename='d:\project\bbsBD.mdf', size=10mb, filegrowth=15% ) log on ( name='bbsDB_log', filename='d:\project\bbsBD_log.ldf', size=3mb, maxsize=20mb, filegrowth=15% ) --创建 bbsUsers 表 use bbsDB go if exists(select name from sysobjects where name='bbsUsers') drop table bbsUsers go create table bbsUsers ( UID int identity(1,1) not null, --用户编号 Uname varchar(15) not null, --用户名 Upassword varchar(10) not null, --密码 Uemail varchar(20), --邮箱 Usex bit not null, --性别 Uclass int , --用户等级 Uremark varchar(20), --备注信息 UregDate datetime not null, --注册日期 Ustate int, --状态 Upoint int --用户积分 ) go --主键 use bbsDB go if exists(select name from sysobjects where name='PK_UID') alter table bbsUsers drop constraint PK_UID go alter table bbsUsers add constraint PK_UID primary key (UID) go --默认密码值 888888 if exists(select name from sysobjects where name='DF_Upassword') alter table bbsUsers drop constraint DF_Upassword go alter table bbsUsers add constraint DF_Upassword default (888888) for Upassword go --密码约束 必须大于6个字符 if exists(select name from sysobjects where name='CK_Upassword') alter table bbsUsers drop constraint CK_Upassword go alter table bbsUsers add constraint CK_Upassword check(Len(Upassword)>=6) GO --默认日期 截取当前时间 getdate() 方法 if exists(select name from sysobjects where name='DF_UregDate') alter table bbsUsers drop constraint DF_UregDate go alter table bbsUsers add constraint DF_UregDate default (getdate()) for UregDate go --邮箱数据约束 if exists(select name from sysobjects where name='CK_Uemail') alter table bbsUsers drop constraint CK_Uemail go alter table bbsUsers add constraint CK_Uemail check (Uemail like '%@%') go --版块编号,外键,引用bbsSection 表的主键 SID use bbsDB if exists (select name from sysobjects where name='FK_TsID') alter table bbsToic drop constraint FK_TsID go alter table bbsTopic add constraint FK_TsID foreign key (TsID) references bbsSection(SID) go --唯一约束 if exists (select name from sysobjects where name='UQ_stuID') alter table bbsToic drop constraint UQ_stuID go alert table bbsTopic add constraint UQ_stuID unique (stuID) ------------------------------------------------------------------------ 第一曲:添加SQL登录用户 use master --go --if exists(select * from syslogins where name='zhouxuan') -- drop loin 'zhouxuan' --go exec sp_addlogin 'zhouxuan' ,'密码' go 第二曲:分配指定数据库 use 需要分配的数据库 go exec sp_grantdbaccess '分配的用户' [,'你的登录账号(必须有权限)'] 第三曲:分配权限 grant 权限 [on 表名] to 数据库用户 权限:insert ,delete, update, select, create table ------------------------------------------------------------- 局部变量: 声明: declare @name varchar(8) declare @seat int 不可 declare @name ,@seat int 赋值: set @name=value select @name = name from . where. 不可 += 两种赋值的区别: 1.select 可以同时对多变量送至 2.set 必须保证查询语句返回单行单列 select当结果中返回多行时,自动将最后一行此字段的知送给变量 3.set当查询语句一行记录都没有返回,为变量送空值。 select 当查询语句一行记录都没有返回,保持原值 declare @stuSeat int set @stuSeat =10 select @stuSeat=stuseat from stuinfo where stuname='李文' print @stuSeat 全局变量 @@error 最后一个T-SQL语句的错误号 @@identity 最后一次插入的标示值 @@language 当前使用的语言的名称 @@max_connections 可以创建的同时连接的最大数目 @@rowcount 受上一个SQL语句影响的行数 @@servername 本地服务器名称 @@servicename 该技术机上的sql服务的名称 @@timeticks 当前技术机上每刻度的微秒数 @@version sqlserver的版本信息 set nocount [on\off ]不显示/显示 distinct 取消重复项 SELECT DISTINCT ProductID FROM Production.ProductInventory 日期部分 缩写 年份 yy、yyyy 季度 qq、q 月份 mm、m 每年的某一日 dy、y 日期 dd、d 星期 wk、ww 工作日 dw 小时 hh 分钟 mi、n 秒 ss、s 毫秒 ms dateadd(dd,3,需要添加的时间) 添加时间 datediff(dd,当前时间,其他时间) 比较两个时间的间隔 datepat(ss,getdate()) 返回表示指定日期的指定日期部分的整数 输出语句: print 局部变量或字符串 select 局部变量 as 自定义列名 控制语句: if(@sumError>0) begin print'交易失败' end else begin print'交易成功' end while(1=1) { begin if(@n>0) update else break } select 是否通过=case when writtenExam>=60 and LabExam>=60 then '通过' else '未通过' end from stuInfo where id=1 GO 关键字标志着批处理的结果 ---------------------------------------------------------------------------------- 数据转换 convert(varchar(6),@send) convert(varchar(15),getdate(),111) 108 109 转换时间格式 ----------------------------------------------------------------------------------- 子查询 in \not in select * from stuinfo where stuno in(select stuno stuMarks where writtenExam>60) ----------------------------------------------------------------------------------- 生成新表并保存数据 if exists(select * from sysobjects where name='newTable') drop table newTable go select ....into newTable ... ------------------------------------------------------------------------------------- 事务: 事务是作为单个逻辑工作单元执行的一系列操作,要么都执行,要么都不执行 4个属性: 1.原子性:事务是一个完整的操作,事务的各种元素是不可分的。 2.一致性:当事务完成时,数据处于一致状态 3.隔离性:对数据进行修改的所以并发事务是彼此隔离的 4.持久性:事务完成后,它对系统的影响是永久性的,该修改即使出现系统故障,也 保持一致 具体操作例子 use bankDB go begin tran --开始事务 declare @sumError int set @sumError=0 update bank set currentMoney=currentMoney+500 where customerName='张三' set @sumError=@sumError+@@error declare @ka char(10) select @ka=cardID from bank where customerName='张三' insert into transInfo(cardID, transType, transMoney, transDate)values(@ka,'存入',500,Getdate()) set @sumError=@sumError+@@error if(@sumError>0) begin rollback tran --回滚事务 print'存钱失败,请确认输入无异常' end else begin commit tran --提交事务 print '存钱成功,请查询余额' end go 自动提交事务:这是SQLServer的默认模式,它将每单条的SQL语句为一个事务,如果执行成功, 则自动提交,如果错误,则自动回滚 set implicit transactions on/off 隐式事务 ------------------------------------------------------------------------------------------- 索引: 索引:是SQLServer编排数据的内部方法,为SQLServer提供一个方法来编排查询数据的路径 索引的作用:使数据库程序无须对整个表进行是扫描,就可以在其中找到所需要的数据 索引页:数据库中储存索引的数据页,索引页存放检索数据行的关键字页以及该数据行的地址指针 唯一索引:唯一索引不允许两行具有相同的索引值 提示:创建了唯一约束,将自动创建唯一索引,尽管唯一索引有助于找到信息,但为了 获得聚佳性能,建议使用主键约束 主键索引:主键,唯一标示 索引分为: 1、聚集索引:包括主键 表中各行的物理顺序与键值的逻辑(索引)顺序相同,表只能包含一个聚集索引 例如:汉语字典默认按拼音排序,拼音字母a b c d e...z 就是索引的逻辑顺序 而页码1.2.3.4 就是物理顺序 2、非聚集索引: 表中各行的物理顺序与键值的逻辑顺序不匹配,聚集索引比非聚集索引有更快速 的数据访问速度 例如:按笔画排序的索引就是非聚集索引,"1"画的字对应的页码可能比"3"画的 字对应的页码大 创建使用索引 use stuDB go if exists(select name from sysindexes where name='IX_stuMarke_writtenExam') where name='IX_stuMarke_writtenExam' drop index stuMarks.IX_stuMarke_writtenExam --删除索引 go ---------创建非聚集索引,填充因子30% create nonclustered index IX_stuMarke_writtenExam on stuMarks(writtenExam) with fillfactor=30 ---填充因子% go ---------创建时可选择 是否唯一 是否为聚集非聚集 [unique] [clustered | nonclustered] 使用索引 select * from stuMarks with (index(IX_stuMarke_writtenExam)) where writtenExam between 60 and 90 ---------------------------------------------------------------------------------------- SQL语句创建视图 use studb go if exists(select * from sysobjects where name='view_name') drop view view_name go create view view_name as <select 语句> go select * from view_name -------------------------------------------------------------------------------------- 常用的系统存储过程 sp_databases 列出服务器上的所有数据库 sp_helpdb 报告有关指定数据库或所有数据库的信息 sp_renamedb 更改数据库名称 sp_tables 返回当前环境下可查询的对象的列表 sp_defaultdb '用户','数据库' 登陆时显示的默认数据库 sp_columns 返回某个表列的信息 sp_help 查找某个表的所有信息 sp_helpconstraint 查看某个表的约束 sp_helpindex 查看某个表的索引 sp_stored_procedures 列出当前环境中的所有存储过程 sp_password 添加或修改登陆用户的密码 sp_helptext 显示默认值,未加密的存储过程,发器或视图的实际文件 调用 exec sp_databases ---列出服务器上的所有数据库 exec sp_renamedb 'db1','db2' ---把数据库名db1改为db2 use stuDB go exec sp_tables --返回当前环境下可查询的对象的列表 exec sp_columns stuInfo --查看表stuInfo中的列的信息 exec sp_help stuInfo --查看表 stuInfo的所有信息 exec sp_helpconstraint stuInfo --查看表stuInfo的约束 exec sp_helpindex stuMarks ---查看表stuMarks的索引 exec sp_helptext 'view_stuInfo_stuMarks' --查看视图的语句文本 exec sp_stored_procedures --返回当前数据库中的存储过程列表 调用DOS命令 exec sp_configure'show advanced options',1 RECONFIGURE exec sp_configure'xp_cmdshell',1 RECONFIGURE exec xp_cmdshell 'md d:\project' ----------------------------------------------------------------------------------------- 存储过程: use stuDB go if exists(select * from sysobjects where name='proc_stu') drop procedure proc_stu go create procedure proc_stu @writtenpass int, --输入参数:考试及格线 @labPass int, --输入 @name varchar(50) output --- 设置外面接收的参数 as print '-----------------------' go ---调用存储过程------------------------------ declare @test varchar(50) exec proc_stu 60,55,@test output --或者 exec proc_stu @labPass=55,@writtenpass=60,@name=@test output 注意: 1.初始化化参数为空就直接 ..=null 判断是否为空就 if .. is null 2.注意传参 参数 错误处理 raiserror('及格线错误,请指定0-100之间的分数,统计退出',16,1) 1-16 错误的严重级别大于10,将自动设置系统全局变量 @error 为非零