标签:硬件 过程 tun 交运算 convert 工程 恢复 name typename
1 --创建数据库 2 create database StudentDB_New 3 on primary 4 ( 5 name=‘StudentDB‘, 6 filename=‘C:\Study File\DATA1\StudentDB.mdf‘, 7 size=3mb, 8 maxsize=unlimited, 9 filegrowth=1mb 10 ), 11 ( 12 name=‘StuDB1‘, 13 filename=‘C:\Study File\DATA2\StuDB1.ndf‘, 14 size=3mb, 15 maxsize=unlimited, 16 filegrowth=1mb 17 ), 18 ( 19 name=‘StuDB2‘, 20 filename=‘C:\Study File\DATA2\StuDB2.ndf‘, 21 size=3mb, 22 maxsize=unlimited, 23 filegrowth=1mb 24 ) 25 log on 26 ( 27 name=‘StudentDB_log‘, 28 filename=‘C:\Study File\DATA1\StudentDB_log.ldf‘, 29 size=1mb, 30 maxsize=1gb, 31 filegrowth=10% 32 ) 33 34 --修改数据库 35 alter database StudentDB_New 36 modify file 37 ( 38 name=StudentDB, 39 size=5mb 40 ) 41 42 --修改数据库:添加一个辅助数据文件到新文件组,先创建文件组再创建文件 43 alter database StudentDB_New 44 add filegroup GData 45 go 46 alter database StudentDB_New 47 add file 48 ( 49 name=‘StuDB3‘, 50 filename=‘C:\Study File\DATA2\StuDB3.ndf‘ 51 ) 52 to filegroup GData 53 54 --删除数据库的辅助数据文件StuDB3 55 alter database StudentDB_New 56 remove file StuDB3 57 58 --删除数据库 59 drop database --- 60 61 --分离数据库,不分离的话无法复制转移 62 exec sp_detach_db StudentDB_New 63 64 --附加数据库,地址可以写拷贝到的新的位置 65 create database StudentDB_New 66 on primary 67 ( 68 name=‘StudentDB‘, 69 filename=‘C:\Study File\DATA1\StudentDB.mdf‘ 70 ) 71 for attach
数据库的分离和附加区别与数据库的删除:数据库的删除就是彻底把物理文件删除掉,像恢复都不可能,但数据库分离只是切掉了数据库和服务器的联系,还是可以再移植回去
1 --创建架构 2 use StudentDB_New 3 go 4 create schema my 5 6 --删除架构 7 drop schema my
1 use StudentDB_New 2 --创建数据表 3 create table Tb_Stu_Info 4 ( 5 Stu_No varchar(20) primary key not null, 6 Stu_Name nvarchar(10), 7 Stu_Sex nvarchar(6), 8 Stu_Birthday date, 9 Stu_Address nvarchar (200) 10 )
1 --修改数表据Tb_Stu_Info, 增加名为STEST的列,数据类型为int,不为空 2 alter table dbo.Tb_Stu_Info 3 add stest int not null 4 5 --修改STEST列的数据类型 6 alter table tb_stu_info 7 alter column stest varchar(20) 8 9 --删除stest列 10 alter table dbo.Tb_Stu_Info 11 drop column stest 12 --删除多列 13 alter table dbo.Tb_Stu_Info 14 drop column Stu_Birthday, Stu_Address 15 16 --新建列 17 alter table dbo.Tb_Stu_Info 18 add Stu_Birthday date, 19 Stu_Address nvarchar(200) 20 21 --删掉数据表 22 drop table dbo.Tb_Stu_Info
1 --创建分区表 2 /*在stuseldb中,依据表studentinfo的stdinfoyear列来创建分区函数YearOrderPartFunc, 3 边界值为2007和2009.*/ 4 5 --首先创建分区函数,可以把as翻译成“依据,按照” 6 create partition function YearOrderPartFunc1(int) 7 as range left for values(‘2007‘, ‘2009‘) 8 --其次创建分区方案 9 create partition scheme YearOrderPartScheme 10 as partition YearOrderPartFunc1 11 to([primary], fgroup2,fgroup3) 12 --最后依据分区方案创建表 13 create table Tb_StudentInfo 14 ( 15 StdInfoID int identity(1,1) not null, 16 StdName varchar(20) not null, 17 StdYear int not null 18 ) 19 on YearOrderPartScheme(StdYear) 20 --int identity(1,1)表示从1开始递增,每次增加1 21 22 --查看数据所在分区 23 select *, $partition.YearOrderPartFunc1(StdYear) 24 as ‘所属分区‘ 25 from dbo.Tb_StudentInfo
1 --创建视图,查询每门课程的授课老师 2 create view View_TeacherCourse 3 (课程名称,老师姓名) 4 as 5 select CourseInfoName,TeachInfoName 6 from dbo.CourseInfo a join dbo.TeachCourse b 7 join dbo.TeachInfo c 8 on b.TeachCourseID=c.TeachInfoID 9 on a.CourseInfoID=b.CourseInfoID 10 11 select * from dbo.View_TeacherCourse 12 13 --查看视图的定义 14 sp_helptext View_TeacherCourse 15 16 --修改视图 17 alter view View_TeacherCourse 18 (课程名称,老师姓名,职称) 19 as 20 select CourseInfoName,TeachInfoName,TeachInfoKnow1 21 from dbo.CourseInfo a join dbo.TeachCourse b 22 join dbo.TeachInfo c 23 on b.TeachCourseID=c.TeachInfoID 24 on a.CourseInfoID=b.CourseInfoID 25 26 --删除视图 27 drop view View_TeacherCourse
1 --Not NULL 约束 2 create table StudentInfo 3 ( 4 StuInfoID int identity(1,1) not null, 5 StuName varchar(20) not null, 6 StuAge int 7 ) 8 9 --default 约束 10 --创建班级信息表,系部默认为“软件学院”,班级人数默认“0”. 11 --创建表的时候来定义约束 12 create table ClassInfo 13 ( 14 ClassInfoID int not null, 15 ClassInDep varchar(20) not null default(‘软件学院‘), 16 ClassInfoCount int not null default(0) 17 ) 18 19 --修改表的时候来定义约束: 20 --给班级编号增加默认值“1001” 21 alter table ClassInfo 22 add constraint df_classInfoID default(1001) for ClassInfoID 23 24 --unique 约束 25 --字段值取值唯一,允许NULL值(只能出现一次) 26 create table StudentInfo2 27 ( 28 StdID int not null, 29 StdInfoNum varchar(20) not null unique, 30 StdInfoCard varchar(18) 31 ) 32 33 alter table StudentInfo2 34 add constraint uq_card unique(StdInfoCard) 35 36 --Check 约束 (score between 0 and 100) 37 create table StudentScore 38 ( 39 StdID int not null, 40 CourseID int not null, 41 Score numeric check(Score>=0 and Score<=100), 42 CourseStartData date not null 43 ) 44 45 alter table StudentScore 46 add constraint ck_StartDate check(CourseStartDate>=‘2014-2-1‘and CourseStartDate<=‘2014-2-8‘) 47 48 --parimary key 约束: 取值范围唯一且不允许NULL 49 create table StudentInfo3 50 ( 51 StuInfoID int primary key not null, 52 StuName varchar(20) 53 ) 54 55 alter table StudentInfo3 56 add constraint pk_ID primary key(StuInfoID) 57 58 --复合主键 59 create table studentCourse 60 ( 61 StdID int not null, 62 CourID int not null, 63 Score numeric not null, 64 constraint pk_StdID_CourID primary key(StdID,CourID) 65 ) 66 67 --foreign key 约束 68 create table studentInfo4 69 ( 70 StdID int primary key not null, 71 StdName varchar(20) not null, 72 ClassInfoID int foreign key references ClassInfo(ClassInfoID) 73 ) 74 75 alter table studentInfo4 76 add constraint fk_ID foreign key(classInfoID) references ClassInfo(ClassInfoID)
1 --删除约束 2 alter table ClassInfo 3 drop constraint DF__ClassInfo__Class__4E88ABD4
1 --创建索引,desc表示降序 2 create clustered index pk_StuInfoID 3 on StudentInfo(StuInfoID desc) 4 5 --重新生成索引 6 alter index pk_StuInfoID 7 on StudentInfo rebuild 8 9 --删除索引 10 drop index pk_StuInfoID 11 on StudentInfo
1 --insert语句,可以一次插入多条语句 2 insert dbo.ClassInfo 3 values(1,‘A‘,10), 4 (2,‘B‘,12), 5 (3,‘C‘,14) 6 7 insert dbo.ClassInfo(ClassInfoID,ClassInfoCount) 8 values(18,17)
1 --插入其他表的数据 2 create table StudentInfo1 3 ( 4 StdInfoNum varchar(20) not null, 5 StdInfoName varchar(20) not null, 6 StdInFoSex varchar(2) not null, 7 StdInfoCard varchar(20) not null, 8 StdInfoAddress varchar(60) not null, 9 StdInfoTel varchar(30) null 10 ) 11 12 insert into dbo.StudentInfo1 13 select StdInfoNum,StdInfoName,StdInFoSex,StdInfoCard, 14 StdInfoAddress,StdInfoTel 15 from dbo.StudentInfo 16 where StdInfoSex=‘女‘
1 --update语句,一定要带上where语句,不然会对所有数据进行修改 2 update dbo.StudentInfo 3 set StdInfoName=‘LK‘, 4 StdInfoTel=‘18824260208‘, 5 StdInfoEmail=‘jld@gmail.com‘ 6 where StdInfoname=‘蓝贝斯‘
1 use StudentDB 2 go 3 update dbo.ClassInfo 4 set ClassInfoCount=100 5 where ClassInDep=‘音乐系‘ 6 7 --修改TeachInfo表的备注列TeachInfoRMK,为所有的兼职教师设置为每周上课不超过10课时 8 use StuSe1DB 9 go 10 update dbo.TeachInfo 11 set TeachInfoRMK=‘每周上课不超过10节‘ 12 from dbo.TeachInfo a join dbo.TeachType b 13 on a.TeachTypeID=b.TeachTypeID 14 where TeachTypeName=‘兼职‘
1 --将‘网页设计’课程考试成绩不及格的在原分数基础上加5分 2 update dbo.StudentCourse 3 set StudCourseExamGrd +=5 4 select TeachCourseID from dbo.TeachCourse 5 where CourseInfoID=(select CourseInfoID from dbo.CourseInfo 6 where courseInfoName=‘网页设计‘) 7 )
1 --简单的删除行:放弃选修的朱老师的《网页设计》课程,改成李竞老师的《广告设计课程》 2 --delete语句 3 delete dbo.StudentCourse 4 where StdInfoID=50 and TeachCourseID=4 5 6 --删除StudentCourse表中,刘立同学的选课信息 7 delete dbo.StudentCourse 8 from dbo.StudentCourse a join dbo.StudentInfo b 9 on a.StdInfoID=b.StdInfoID 10 where StdInfoName=‘刘立‘ 11 12 --删除表中所有数据 13 use StudentDB_New 14 go 15 alter table dbo.studentInfo4 16 drop constraint fk_ID 17 go 18 delete dbo.ClassInfo 19 20 --truncate删除效率更高 21 truncate table dbo.StudentInfo
1 use StudentDB_New 2 --1.查询院系信息表的所有信息 3 select * from dbo.DepInfo 4 5 --2.查询教师信息表中的教师的姓名、专业和职称 6 select TeachInfoName, TeachInfoSpec, TeachInfoTilte 7 from dbo.TeachInfo 8 9 --3.查询所有老师从事的专业 10 select TeachInfoSpec from dbo.TeachInfo 11 12 --4.查询所有老师从事的专业,消除重复 13 select distinct TeachInfoSpec from dbo.TeachInfo 14 15 --5.查询班级信息表中的前8条记录的班级代号,班级名称 16 select top 8 ClassInfoCode,ClassInfoName from dbo.ClassInfo 17 18 --6.查询班级信息表中的前百分之二十的记录的班级代号和班级名称 19 select top 20 percent ClassInfoCode, ClassInfoName 20 from dbo.ClassInfo 21 22 --7.查询课程信息表中课程名称,理论学时,实践学时 23 select CourseInfoName, CourseInfoRstPer,CourseInfoPraper 24 from dbo.CourseInfo 25 26 --8.查询课程信息表中课程名称,理论学时,实践学时,总学时(计算列值) 27 select CourseInfoName, CourseInfoRstPer,CourseInfoPraper, 28 CourseInfoRstPer+CourseInfoPraper 29 from dbo.CourseInfo 30 31 --9.查询课程信息表中课程名称,理论学时,实践学时,总学时(计算列值), 32 --给每一列起一个中文别名 33 select CourseInfoName as 课程名称, 34 CourseInfoRstPer as 理论学时, 35 CourseInfoPraper as 实践学时, 36 CourseInfoRstPer+CourseInfoPraper as 总学时 37 from dbo.CourseInfo 38 39 --10.以另外的方式取别名 40 select 课程名称=CourseInfoName, 41 理论学时=CourseInfoRstPer, 42 实践学时=CourseInfoPraper, 43 总学时=CourseInfoRstPer+CourseInfoPraper 44 from dbo.CourseInfo
1 --12.查询某年以后出生的学生学号姓名、性别和出生日期, 2 --结果按照年龄从小到大排序 3 --排序默认升序ASC,降序是DESC 4 select stdinfonum,stdinfoname,stdinfobirthd 5 from dbo.studentinfo 6 where stdinfobirthd >= ‘1990-1-1‘ 7 order by stdinfobirthd desc 8 9 --查询出生日期在1990-1-1之后的女生。 10 select * from studentinfo 11 where stdinfobirthd >‘1990-1-1‘ and stdinfosex=‘女‘ 12 13 --查询所有姓张的学生的信息 14 --like可以做模糊查询 15 select * from studentinfo 16 where stdinfoname like ‘张%‘ 17 18 --查询入学年份在2007到2009之间的学生信息。 19 select * from studnetinfo 20 where stdinfoyear between 2007 and 2009 21 --或者写 22 where stdinfoyear in (2007,2008,2009) 23 24 -12. 查询某年以后出生的学生的学号姓名、性别和出生日期,结果按照年龄排序 25 --当年龄相同时,按先女生后男生排序 26 select stdinfonum,stdinfoname,stdinfobirthd 27 from dbo.studentinfo 28 where stdinfobirthd >= ‘1990-1-1‘ 29 order by stdinfobirthd desc, stdinfosex desc 30 31 --13. 聚合函数 32 --查询班级信息表的所有信息 33 --统计学生,教师的总人数 34 --统计系部教学编制的总数、最大、最小及平均值 35 select count(*) from studentinfo 36 select count(*) from teacherinfo 37 select sum(depinpreoftech) as 总数, 38 max(depinpreoftech) as 最大值, 39 min(depinpreoftech) as 最小值, 40 avg(depinpreoftech) as 平均值 41 from depinfo 42 43 --14. 查询教师表中有各种学历的人数 44 select teachinfoknowl,count(teachinfoknowl) as 数量 45 from teachoinfo 46 group by teachinfoknowl 47 --以上这一步很重要,使用聚合函数的时候一定要select后面全是聚合函数 48 --不能既有字段又有聚合函数,如果一定有,后面一定要接上group by 49 50 --15. 统计1990年以后出生的男女学生各有多少人 51 select teachinfosex, count(*) 52 from studentinfo 53 where stdinfobirthd>‘1990-1-1‘ 54 group by stdinfosex
4. 数据排序、数据分组与汇总
1 --16.显示所有学生的相关信息,并汇总学生总人数 2 select stdinfoname,stdinfosex,stdinfonatns 3 from studentinfo 4 compute count(stdinfoname) 5 6 --17.显示所有学生的相关信息,并按照学生所属民族分类汇总 7 select stdinfoname,stdinfosex,stdinfonatns 8 from studentinfo 9 order by stdinfonatns 10 compute count(stdinfonatns) by stdinfonatns
5. INTO子句
1 --1.查看每个教师的基本信息及教师类别(内连接) 2 select teachinfoname,teachinfosex,teachtypetilte 3 teachtypename 4 from teachinfo a inner join teachtype b 5 on a.teachtypeid=b.teachtypeid 6 7 --查看每位教师的授课情况,不管教师有没有授课都要包括其情况(左外连接) 8 select teachinfonum,teachinfosex,teachtypetilte,courseinfoid 9 from teachinfo a left join teachcourse b 10 on a.teachinfoid=b.teachinfoid 11 12 --查询所有老师授课课程的选课情况(右外连接) 13 select studcourseid,stdinfoid,teachinfoid,courseinfoid 14 from studentcourse a right join teachcourse b 15 on a.teachcourseid=b.teachcourseid 16 17 --使用完全外连接查看stuseldb数据库中每位老师的授课情况 18 select a,b,c 19 from teachcourse a full join teachinfo b 20 on a.teachinfoid=b.teachinfoid 21 22 --5.查询所有女生的班级信息 23 select name,sex,class 24 from classinfo a join studentinfo b 25 on a.classinfoid=b.classinfoid 26 where stdinfosex=‘女‘ 27 28 --6.查询学生所属的班级信息和专业信息(三表关联) 29 select a,b,c 30 from studentinfo a join classinfo b 31 on a.classinfoid=b.classinfoid 32 join specilinfo c 33 on b.spilinfoid=c.spilinfoid
1 --7.查询选课程最多的学生由高到低排序 2 select stdinfoname,count(b.stdinfoid) 课程门数 3 from studentinfo a join studentcourse b 4 on a.stdinfoid=b.stdinfoid 5 group by stdinfoname 6 order by 课程门数 desc 7 8 --查看计算机工程系的老师授课的选修情况(4表) 9 select teachinfoname, depinfoname,count(stdinfoid) 10 from depinfo a join teachinfo b 11 on a.depinfoid=b.depinfoid 12 join teachcourse c 13 on b.teachinfoid=c.teachinfoid 14 join studentcourse d 15 on c.teachcourseid=d.teachcourseid 16 where depinfoname=‘计算机工程系‘ 17 group by teachinfoname depinfoname 18 19 --10.利用并运算查询学生和老师的姓名 20 select teachinfoname from teachinfo 21 union 22 select stdinfoname from studentinfo 23 24 --11.利用交运算查询彭欢老师和朱志奇老师教授的同一门课程 25 --列出课程名称 26 select courseinfoname 27 from courseinfo a join teachcourse b 28 on a.courseinfoid=b.courseinfoid 29 join teachinfo c 30 on b.teachinfoid=c.teachinfoid 31 where teachinfoname=‘彭欢‘ 32 intersect 33 select courseinfoname 34 from courseinfo a join teachcourse b 35 on a.courseinfoid=b.courseinfoid 36 join teachinfo c 37 on b.teachinfoid=c.teachinfoid 38 where teachinfoname=‘朱志气‘ 39 40 --12. 利用差运算查询由彭欢老师授课而没有由朱志奇老师教授的课程 41 --列出课程名称 42 select courseinfoname 43 from courseinfo a join teachcourse b 44 on a.courseinfoid=b.courseinfoid 45 join teachinfo c 46 on b.teachinfoid=c.teachinfoid 47 where teachinfoname=‘彭欢‘ 48 except 49 select courseinfoname 50 from courseinfo a join teachcourse b 51 on a.courseinfoid=b.courseinfoid 52 join teachinfo c 53 on b.teachinfoid=c.teachinfoid 54 where teachinfoname=‘朱‘
1 --子查询用作派生表 2 --1.查找比所有课程类别ID为1的 课程总学时都要高的课程 3 select courseinfoname.coursetypeid 4 from courseinfo 5 where courseinfohothrs > all 6 (select courseinfohothrs from courseinfo 7 where coursetypeid=1) 8 --2.查询stuseldb数据库中所有已获副教授职称的女教师的姓名、性别、学历、专业和职称。 9 select * from ( 10 select teachinfoname,teachinfosex,teachinfoknowl,teachinfotilte 11 from teachinfo 12 where teachinfotilte=‘副教授‘ 13 ) as t 14 where t.teachinfosex=‘女‘ 15 16 --子查询用作表达式 17 --3.查找开设了课程ID为7的课程的教师的相关信息 18 --首先查询课程id为7的课程由那些教师授课 19 select teachinfoid from teachcourse 20 where courseinfoid=7 21 --其次查询上一个步骤里老师的信息 22 select teachinfoid,teachinfoname,teachinfosex,teachinfoknowl,teachinfospec 23 from teachinfo 24 where teachinfoid in (select teachinfoid from teachcourse 25 where courseinfoid=7) 26 27 --4.查找数据库库中选修了7号课程的学生学号、姓名和联系电话。 28 --子查询的select语句只能来自一个表,和连接查询区别一下 29 select stdinfonum,stdinfoname,stdinfotel 30 from studentinfo 31 where exists( 32 select * from studentcourse 33 where stdinfoid=studentinfo.stdinfoid 34 and exists ( 35 select * from teachcourse 36 where courseinfoid=7 and 37 teachcourseid=studentcourse.teachcourseid 38 ) 39 ) 40 41 --查询图像0801班的学生信息 42 select * from studentinfo 43 where classinfoid=(select classinfoid from classinfo 44 where classinfoname=‘图像0801‘) 45 --都可以实现,但推荐用子查询,连接查询的代价更高 46 select * from studentinfo a 47 join classinfo b 48 on a.classinfoid=b.classinfoid 49 where classinfoname=‘图像0801‘ 50 51 --7.查询课程考试不及格的学生的姓名和课程名(来自多表) 52 select 姓名=(select stdinfoname from studentinfo 53 where stdinfoid=a.stdinfoid), 54 课程名=(select courseinfoname from courseinfo 55 where courseinfoid in ( 56 select courseinfoid from teachcourse 57 where teachcourseid=a.teachcourseid)) 58 from studentcourse a 59 where studcourseusugrd<60
1 --查询stdinfoid为6的学生的姓名和已选课程门数,当选课程门数在3门以上 2 --输出“xx,已完成选课”,否则输出“cxx,还需选课” 3 declare @sname varchar(50),@num int 4 select @sname=stdinfoname from studentinfo 5 where stdinfoid=6 6 print @sname 7 set @num=(select count(*) from studentcourse 8 group by stdinfoid 9 having stdinfoid=6) 10 if @num>=3 11 begin 12 print @sname+‘,你已经完成了选课‘ 13 end 14 else 15 print @sname+‘,你还需继续选课‘ 16 17 -- 简单CASE结构:查询studentinfo表中学生的性别 18 --若是女生显示female,否则显示male 19 select stdinfoname,stdinfosex,性别=case 20 when stdinfosex=‘男‘ then ‘male‘ 21 when stdinfosex=‘女‘ then ‘female‘ 22 end 23 from studentinfo 24 25 --3.循环结构:计算1-100内能被3整除的最大数 26 declare @x int=100 27 while(@x>=1) 28 begin 29 if(@x % 3=0) 30 break 31 set @x-=1 32 end 33 print @x 34 35 --创建和执行存储过程 36 --定义一个存储过程,用于查询stuseldb数据库中所有教师的 37 --姓名、性别、学历、职称和所授课的课程名称 38 create procedure showteacourse 39 as 40 select teachinfoname 41 from teachinfo a join teachcourse b 42 on a.teachinfoid=b.teachinfoid 43 --执行存储过程,直接选择程序名字 44 execute showteacourse
1 --带参数的存储过程: 2 --定义一个存储过程,用于查询数据库中某一位老师的姓名、性别、学历和课 3 --的课程名称 4 --输入参数 5 create proc showteainfobyname 6 @teachername varchar(30) 7 as 8 select teachinfoname,teachinfosex,teachinfoknowl 9 from teachinfo a join teachcourse b 10 on a.teachinfoid=b.teachinfoid 11 where teachinfoname=@teachername 12 13 14 --执行带输入参数的存储过程 15 showteainfobyname ‘李静‘ 16 17 --9.定义一个存储过程在教师授课表中增加教师开设课程的记录 18 /*如李范老师(教师ID为16)开设C语言课程(26)的记录*/ 19 --输出参数 20 create proc addteacourse 21 @teainfoid int, @courseinfoid int, 22 @teacourseid int output 23 as 24 insert teachcourse 25 values(@teainfoid,@courseinfoid) 26 --设置输出参数,用来存储自动增长的编号 27 Set @teacourseid=scope_identity() 28 29 --执行 30 declare @teacourid int 31 exec addteacourse 17,26,@teacourid output 32 select @teacourid 33 34 select * from teachcourse where teachinfoid=17 35 and courseinfoid=26
1 --修改存储过程 2 /*6.修改存储过程,用于查询数据库中所有副教授职称的教师的 3 姓名、性别、学历、职称和所授课的课程名称*/ 4 alter procedure showteacourse 5 as 6 7 --7.删除存储过程 8 drop procedure showteacourse
1 /*DML触发器 2 1.创建insert触发器,如果向教师信息表teachinfo中插入记录时,检查该记录的院系编号在 3 院系信息表depinfo中是否存在,如果不存在,则不允许插入*/ 4 --inserted,逻辑表,存放插入之后的记录 5 create trigger trig_insertteachinfo 6 on teachinfo 7 after insert 8 as 9 begin transaction 10 if exist (select * from inserted a 11 where a.depinfoid not in(select depinfo from depinfo)) 12 begin 13 raiserror(‘数据一致性验证!‘,19,1) 14 rollback transaction 15 end 16 else 17 commit transaction 18 19 /*2.创建update触发器,当班级信息表classinfo中的主键classinfoid进行 20 修改时,必须对学生表中相应的classinfoid也进行修改*/ 21 --更新分成2步骤:先删除原数据,再插入新数据 22 --deleted,逻辑表,存放删除之后的记录(原表) 23 create trigger trig_updateclass 24 on classinfo 25 after update 26 as 27 if update(classinfoid) 28 begin 29 update studentinfo 30 set classinfoid=(select classinfoid from inserted) 31 where classinfoid=(select classinfoid from deleted) 32 end 33 34 --测试 35 update classinfo 36 set classinfoid=444 where classinfoid=4 37 38 /*3.创建delete触发器,当删除学生信息表studentinfo中已退学的学生资料 39 时,自动删除学生选课表studentcourse中此学生相应的所有信息*/ 40 create studentinfo 41 after delete 42 as 43 begin 44 declare @stdinfoid int 45 select @stdinfoid=deleted.stdinfoid from deleted 46 deleted studentcourse 47 where stdinfoid =@stdinfoid 48 end 49 50 --测试 51 delete studentinfo 52 where stdinfoid=2 53 54 /*4.创建instead of触发器,限制不允许删除院系信息表depinfo中已存在 55 的院系记录*/ 56 create trigger trig_deletedep 57 on depinfo 58 instead of delete 59 as 60 begin 61 declare @delcount int 62 select @delcount=count(*) from deleted 63 if @delcount>0 64 begin 65 raiserror(‘不能删除院系表中的任何记录!‘,10,1) 66 rollback transaction 67 end 68 end 69 --测试 70 delete depinfo 71 72 --5.修改及删除触发器 73 drop trigger name 74 75 alter trigger name
1 --DDL触发器 2 /*7. 定义DDL触发器来防止数据库stuseldb中的任一 3 表被修改或删除*/ 4 create trigger trig_studeldbsafe 5 on database 6 for drop_table, alter_table 7 as 8 print ‘你不能删除或修改studeldb中任何对象‘ 9 rollback 10 11 --8.删除DDL触发器 12 drop trigger trig_stuseldbsafe 13 on database 14 15 /*6.创建触发器,当在学生信息表中插入或删除记录时,班级 16 信息表classinfo中的班级人数进行实时更新*/ 17 create trigger trig_sudinfoclassnum 18 on studentinfo 19 after insert,delete 20 as 21 if(exists (select * from inserted)) 22 begin 23 update classinfo 24 set classinfosum+=1 25 where classinfoid=(select classinfoid from inserted) 26 end 27 if (exists (select * from deleted)) 28 begin 29 update classinfo 30 set classinfosum-=1 31 where classinfoid in (select classinfoid from deleted) 32 end
1 --转换函数 2 select cast(‘11.43‘ as float), 3 convert(varchar(20),getdate(),112) 4 --数学函数 5 select geiling(5.6),floor(5.6) 6 select abs(-30) 7 8 --字符串函数 9 --学生信息表王的学生的学号姓名性别 10 select stdinfonum,stdinfoname,stdinfosex 11 from studentinfo 12 where substring(stdinfoname,1,1)=‘王‘ 13 --也可以用模糊搜索where stdinfoname like ‘王%‘ 14 15 --日期函数:查询学生信息表中年龄在20-25岁的学生学号等 16 select * from( 17 select stdinfonum,stdinfoname,stdinfosex, 18 datediff(year,stdinfobirthd,getdate()) age 19 from studentinfo) as temp 20 where age between 20 and 25
1 --用户自定义函数 2 --2.创建标量函数ftitlesum,统计指定院系的教师人数 3 create function ftitlesum(@depname varchar(20)) 4 returns int 5 as 6 begin 7 declare @num int 8 select @num=count(*) from teachinfo 9 where depinfoid=(select depinfoid from 10 depinfo where 11 depinfoname=@depname) 12 return @num 13 end 14 15 --调用 16 declare @name varchar(20)=‘信息工程系‘ 17 select ftitlesum(@name)
1 --3. 创建内联表值函数fselteach,用来查询指定院系的教师信息 2 select * from teachinfo 3 where depinfoid=(select depinfo from 4 depinfo where 5 Depinfoname=‘信息工程系‘) 6 7 create function fselteach(@depname varchar(20)) 8 returns table 9 as 10 return (select teachinfonum,teachinfoname,teachinfoknowl 11 from teachinfo 12 where depinfoid=(select depinfoid from depinfo 13 where depinfoname=@depname)) 14 15 --调用 16 declare @d varachar(20)=‘信息工程系‘ 17 select * from fselteach(@d) 18 19 --4.创建多语句表值函数fselcourse,用来查询指定教师任 20 --教的课程名称、实践课时、理论课时和总课时 21 create function fselcourse(@teachname varchar(20)) 22 returns @teach_course table 23 ( 24 课程名称 varchar(80), 25 理论学时 int, 26 实践学时 int, 27 总学时 int 28 ) 29 as 30 begin 31 insert into @teach_course 32 select courseinfoname,courseinforstper,courseinfopraper 33 courseinforstper+courseinfopraper 34 from courseinfo c join teachinfo a 35 join teachcourse b 36 on a.teachinfoid=b.courseinfoid 37 on c.teachinfoname=@teachname 38 return 39 end 40 41 --调用 42 select * from fselcourse(‘朱志奇‘)
1 /*5.游标的使用 2 对studentinfo表,定义一个查询汉族,性别男生的学生姓名、性别 3 民族的游标,并输出游标结果*/ 4 --申明相关变量 5 declare @sname varchar(20), 6 @ssex varchar(5), 7 @snatuns varchar(5) 8 --申明游标 9 declare student_cursor cursor for 10 select stdinfoname,stdinfosex,stdinfonatns 11 from studentinfo 12 where stdinfonatns=‘汉‘ and stdinfosex=‘男‘ 13 --打开游标 14 open student_cursor 15 --提取数据 16 fetch next from student_cursor into @sname,@ssex,@snatuns 17 --用来判断游标提取状态的全局变量@@fetch_status 18 while @@fetch_status=0 19 begin 20 print ‘学生姓名‘+@sanme+‘性别‘+@ssex+‘民族‘+@snatns 21 fetch next from student_cursor into @sname,@ssex,@snatns 22 end 23 --关闭游标 24 close student_cursor 25 --释放游标 26 deallocate student_cursor
1 --1.将windows账户中的用户‘teacher’添加到SQL sever登录中 2 --默认数据为master 3 create login moon-PC\Teacher 4 from windows 5 with default_database=[master] 6 7 --2.创建名为teachers的SQL登录,密码为sq1@123% 8 --默认数据库为master,强制实施密码策略 9 create login teachers 10 with password=‘sq1@123%‘ 11 with default_database=[master], 12 check__expiration=on 13 check_policy=on 14 15 --3.修改SQL登录teachers,密码改为‘123’ 16 alter login teachers 17 with password=‘123‘ 18 old_password=‘sq1@123%‘ 19 20 --4.禁用teachers登录 21 --启用 22 alter login teachers enable 23 --禁用 24 alter login teachers disable 25 26 --5.删除teachers登录名 27 drop login teachers 28 29 --用户管理 30 --6.创建名为teachuser的登录名,在数据库中,创建用户teach1与teachuser 31 --登录名对应 32 create login teachuser 33 with password=‘123‘, 34 default_database=[master] 35 go 36 use stuseldb 37 go 38 create user teach1 39 for login teachuser 40 41 --7.修改在数据库中创建的用户teach1 42 --将其名称改为teach2 43 alter user teach1 44 with name=teach2 45 46 --8.删除stuseldb数据库中用户teach2 47 drop user teach2 48 49 --用户权限管理 50 --9.在数据库库中,创建用户teacher,其对应登录名为teachers 51 --并将表teachinfo的select权限授予teacher 52 create login teachers 53 with password=‘sq1@123%‘ 54 with default_database=[master], 55 check__expiration=on 56 check_policy=on 57 58 create user teacher 59 for login teachers 60 grant select on teachinfo to teacher 61 62 --10. 拒绝用户teacher查看adminuser表的权限 63 deny select on adminuser to teacher 64 --11.撤销用户teacher对表techinfo的select权限 65 revoke select on techinfo to teacher 66 67 --角色管理 68 --12.将SQL登录名teacher添加到sysadmin固定服务器角色中 69 --使其可以在数据库服务器上执行任何操作 70 exec sp_addsrvrolemember ‘teachers‘,‘sysadmin‘ 71 exec sp_dropsrvrolemember ‘teachers‘,‘sysadmin‘
标签:硬件 过程 tun 交运算 convert 工程 恢复 name typename
原文地址:https://www.cnblogs.com/lockegogo/p/12307603.html