- 浏览: 44041 次
文章分类
最新评论
SQL Server 2005中的基础知识。
1. ACID:指数据库事务正确执行的四个基本要素缩写:
1.原子性2.一致性3.隔离性4.持久性
2.数据库对象:表(table) 视图(view) 存储过程(stored procedure) 函数(function)索引(index)
3.SQL Server 2005中包含master、model、msdb、tempdb四个系统数据库。
4.使用T-SQL语句创建数据库:
5.T-SQL语句删除数据库:drop database[数据库名]
6.常见的约束类型:主键约束、唯一约束、检查约束、默认约束、外键约束。
7.添加约束的语法:
Alter table 表名
Add constraint 约束名 约束类型 具体的约束说明
8.删除约束:alter table 表名
Drop constraint 约束名
9.授权语法: grant 权限[on 表名] to 数据库用户
例:grant select insert update
On students to zhangsan
10.T-SQL语句创建登录名:
Create login[yuan]
With password='130125'
Go
11.数据库完整性分为:实体完整性、域完整性、参照完整性、用户自定义完整性。
12.T-SQL 中的运算符:
运算符
含义
=
等于
>
大于
<
小于
>=
大于等于
<=
小于等于
<>
不等于
!
非
通配符
解释
示例
_
一个字符
A Like 'C_'
%
任意长度的字符
B Like 'CO_%'
[]
括号中所指定范围内的一个字符
C Like '9W0[1-2]'
[^]
不在括号中所指定范围内的一个字符
D Like '%[A-Z][^1-2]'
13.查询语句:select 列名 from 表名 where 条件 如:select* from students where no=1
14.插入数据行:insert [into]<表名> [列名]values<值列表>
例:intset into students(name,address,grade,email,sex)
Values('长青菜','上海松江',5,'www.jbxue.com','男')
注意:(不能为标识列指定值,因为它的数字是自动增长的)
15.更新数据行:update <表名> set<列名=更新值> [where<更新条件>]
例:update students
Set address='石家庄'
Where address='保定'
16.删除数据行: delete from<表名>[where<删除条件>]
例:delete from studentinfo where no='180108225'
17.问题:如果标识列A的初始值为1,增长量为2,则输入三行数据以后,再删除两行,下次再输入数据行的时候,标识值从多少开始? ( 7 )
18.删除列: alter table student drop column address
19.Exists: if exists (select*from?where name='yuanDB') drop database stuDB
20.变量: 局部变量(必须以标记@作为前缀)
全局变量(必须以标记@@作为前缀)
全局变量由系统定义和维护,我们只能读取,不能修改全局变量的值。
21.局部变量声明: 例:Decalre @name vachar(8) decare @seat int
赋值:set @变量名=值或select@变量名=值 set @name='张三'
Select @name=sname from students where no='1'
22.逻辑控制语句: IF-ELSE语句
If(条件)
Begin
语句1
语句2...........
End
Else
Begin
语句1
语句2.........
End 注:else是可选的。
例: decalre @myavg float
Select @myavg =AVG(course) from score
Print'平均分'+convert(varchar(5),@myavg)
If(@myavg>70)
Begin
Print '本班成绩优秀,前三名成绩为:'
Select top 3 * from score order by score desc
End
Else
Begin
Print '本班成绩较差,后三名成绩为:'
Select top 3 *from score order by score
End
23.while循环语句: while(条件)
Begin
语句1
语句2..........
Break
End
例:DECLARE @n int
WHILE(1=1) --条件永远成立
BEGIN
SELECT @n=COUNT(*) FROM score
WHERE score<60 --统计不及格人数
IF (@n>0)
UPDATE score --每人加2分
SET score=score+2
ELSE
BREAK --退出循环
END
print '加分后的成绩如下:'
SELECT * FROM score
24.case--end多分支语句
语法: case
When 条件1 then 结果1
When 条件2 then 结果2
..............
Else 其他结果
End
例:print 'ABCDE五级显示成绩如下:'
Select studentID,
成绩=case
When score<60 then'E'
When score between 60 and 69 then 'D'
When score between 70 and 79 then 'C'
Else 'A'
End
From score
25.批处理语句示例:
SELECT * FROM stuInfo
SELECT * FROM stuMarks
UPDATE stuMarks
SET writtenExam=writtenExam+2
GO
26.习题及答案:
习题内容:则根据如下规则对成绩进行反复加分,直到平均分超过85分为止。请编写T-SQL语句实现。
90分以上: 不加分
80-89分: 加1分
70-79分: 加2分
60-69分: 加3分
60分以下: 加5分
习题答案:
27.把一个表中的数据复制到另一个表中: insert into <表名>(列名)
Select <列名>
From <源表名>
28.把查询结果放在新表中同时插入新的标识列:
Select 列名 identity(数据类型,标识种子,标识增长量)as
列名 into 新表 from 原始表
例: select students.sname, students.saddress, students.semail, identity(int,1,1) as studentID into tongxunlu from students
29.更新数据行:
语法: update<表名>
Set<列名=更新值>
Where <更新条件>
例: update students
Set address='软件学校'
Where address='软件学院'
30.问题:按多列排序:例:select no,name,address,grade
From students
Where sex in(1,0)
Order by no,grade
31.字符串函数:
32.聚合函数:
Max-min: select AVG(score) as 平均成绩,MAX(score) as 最高分,MIN(score) as最低分 from score where score>=60
Count: select count(*)as 及格人数 from score
Where score>=60
33. 分组查询:
select courseid,avg(score) as 课程平均成绩
From score
Group by courseid
34.习题:
假如成绩单中记录了学生的几次考试成绩,要查询每位学生的每门课的总成绩,怎么查?
35.分组查询--HAVING
Having:指定了组或聚合的搜索条件,常常与group by子句一起使用。
例:
36.多表查询——内联结
例:
select students.smame, score.courseid, score.score
From students,score
Where students.scode=score.studentid
37.多表联结——三表联结
例:
select S.name as姓名,CS.coursename as课程,C.score as 成绩 from students As S
Inner Join score as C ON(S.scode=C.studentid)
Inner join course As CS ON(CS.courseid=C.courseid)
38.多表联结查询——右外联结
例:
39.银行案例——多表联结——左外联结:
例:
40.子查询:
例:
41.例:内联结(等值联结)
42.局部变量:
例:将姓名为里斯的学生的学号,出生日期和平均成绩分别赋给局部变量
@no_str @birthday_str @avgrade_num (用select语句来实现)
Select @no_str=s_no,@birthday_str=s_birthday,@avgrade_num=s_avgrade
From student where s_name='里斯'
43.自连接查询:
例:(注:student2为不存在,是创建的)
44.声明局部变量:declare @变量名 数据类型
45.if语句 例:查询学号为457865的学生,如果成绩及格,则打印其姓名和成绩。
46.if-else语句:对于给定学号的查询,如果平均成绩不及格则打印姓名和平均成绩,否则打印学号。
47.多分支的if语句查询并实现分等级打印学生成绩
48.case 语句 使用select语句查询学生的学号,然后用case函数对学生的姓名和爱好进行简要说明。
49.while语句
(如果学生平均成绩低于85分,则循环执行对每位学生成绩加0.5%,在循环过程中,如果最高成绩超过95分则退出循环;在加分过程中,当成绩的平均成绩大于或等于80分时打印出当前成绩的平均成绩)
50.子查询:查询成绩刚好通过60分的学生
51.事务的特性:原子性、一致性、隔离性、永久性。
事务分类:显示事务、隐性事务、自动提交事务。
52.系统存储过程的名称都以“sp_”开头或“xp_”开头。
EXEC sp_databases 列出当前系统的数据库
EXEC sp_help students 查看表students的信息
53.定义存储过程的语法:
Create proc[edure] 存储过程名
@参数1 数据类型=默认值 output,
...................
@参数n 数据类型=默认值 output
As
SQL语句
Go (注:参数可选,参数分输入参数、输出参数,输入参数允许有默认值)
54.创建不带参数的存储过程:
例:
55.调用存储过程: 语法: EXEC 过程名[参数] 例:EXEC proc_stu
56.输入参数的默认值:
例:
57.调用带参数默认值的存储过程:
EXEC proc_stu -------采用默认值
EXEC proc_stu 55 ------不采用默认值
EXEC proc_stu @scorePass=55
58.带输出参数的存储过程:
59.调用带输出参数的存储过程:(注:调用时必须带output关键字,返回结果将存放在变量@sum 中)
60.错误处理:
使用Raiserror语句:
61.使用raiserror语句
63.带输出参数的存储过程:
例:
64.创建触发器语法:
65.Insert 触发器
例:
66. 插入一条语句
例:
68. Update 触发器:
69. 列级update触发器
70.数据库阶段数据管理的主要特点:1.采用数据模型表示复杂的数据结构;2.有较高的数据独立性;3.为用户提供了方便的用户接口;4.提供数据控制功能;5.增加系统 的灵活性。
71. DB(数据库):存储在计算机内有组织的、统一管理的相关数据的集合。
DBMS(数据库管理系统):位于用户与操作系统之间的数据管理软件。
DBS(数据库系统):是实现有组织的、动态的存储大量关联数据,以方便用户访问计算就硬件、软件和株距资源组成的计算机系统。
72.物理数据独立性和逻辑数据独立性:
物理数据独立性:内模式的修改,只需对模式/内模式映象做相应修改,而不需修改 概念模式。逻辑数据独立性:概念模式的修改,只需对外模式/模式映象做相应修改,而不
需修改外模式。
73. DBMS的主要功能:
数据定义(DDL):三级结构、两级映象、完整性约束等。数据操纵(DML):检索、更新。数据保护:数据恢复、并发控制、完整性控制、安全性控制等。数据维护:数据载入、转换、存储、、性能监控等。数据字典(DD):存储三级结构定义的数据库称为DD,即系统数据库。DBMS主要功能:数据库定义功能、数据存取功能、数据库运行管理功能、数据库的建立和维护功能。
74.--1、创建存储过程--
75.
76.代码:
76.导出SQL Server数据库中数据:
1. ACID:指数据库事务正确执行的四个基本要素缩写:
1.原子性2.一致性3.隔离性4.持久性
2.数据库对象:表(table) 视图(view) 存储过程(stored procedure) 函数(function)索引(index)
3.SQL Server 2005中包含master、model、msdb、tempdb四个系统数据库。
4.使用T-SQL语句创建数据库:
CREATE DATABASE [ApressFinacial] ON PRIMARY ( NAME = N'ApressFinacial', FILENAME = N'I:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\ApressFinacial.mdf' , SIZE = 3072KB , FILEGROWTH = 1024KB ) LOG ON ( NAME = N'ApressFinacial_log', FILENAME = N'I:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\ApressFinacial_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%)
5.T-SQL语句删除数据库:drop database[数据库名]
6.常见的约束类型:主键约束、唯一约束、检查约束、默认约束、外键约束。
7.添加约束的语法:
Alter table 表名
Add constraint 约束名 约束类型 具体的约束说明
8.删除约束:alter table 表名
Drop constraint 约束名
9.授权语法: grant 权限[on 表名] to 数据库用户
例:grant select insert update
On students to zhangsan
10.T-SQL语句创建登录名:
Create login[yuan]
With password='130125'
Go
11.数据库完整性分为:实体完整性、域完整性、参照完整性、用户自定义完整性。
12.T-SQL 中的运算符:
运算符
含义
=
等于
>
大于
<
小于
>=
大于等于
<=
小于等于
<>
不等于
!
非
通配符
解释
示例
_
一个字符
A Like 'C_'
%
任意长度的字符
B Like 'CO_%'
[]
括号中所指定范围内的一个字符
C Like '9W0[1-2]'
[^]
不在括号中所指定范围内的一个字符
D Like '%[A-Z][^1-2]'
13.查询语句:select 列名 from 表名 where 条件 如:select* from students where no=1
14.插入数据行:insert [into]<表名> [列名]values<值列表>
例:intset into students(name,address,grade,email,sex)
Values('长青菜','上海松江',5,'www.jbxue.com','男')
注意:(不能为标识列指定值,因为它的数字是自动增长的)
15.更新数据行:update <表名> set<列名=更新值> [where<更新条件>]
例:update students
Set address='石家庄'
Where address='保定'
16.删除数据行: delete from<表名>[where<删除条件>]
例:delete from studentinfo where no='180108225'
17.问题:如果标识列A的初始值为1,增长量为2,则输入三行数据以后,再删除两行,下次再输入数据行的时候,标识值从多少开始? ( 7 )
18.删除列: alter table student drop column address
19.Exists: if exists (select*from?where name='yuanDB') drop database stuDB
20.变量: 局部变量(必须以标记@作为前缀)
全局变量(必须以标记@@作为前缀)
全局变量由系统定义和维护,我们只能读取,不能修改全局变量的值。
21.局部变量声明: 例:Decalre @name vachar(8) decare @seat int
赋值:set @变量名=值或select@变量名=值 set @name='张三'
Select @name=sname from students where no='1'
22.逻辑控制语句: IF-ELSE语句
If(条件)
Begin
语句1
语句2...........
End
Else
Begin
语句1
语句2.........
End 注:else是可选的。
例: decalre @myavg float
Select @myavg =AVG(course) from score
Print'平均分'+convert(varchar(5),@myavg)
If(@myavg>70)
Begin
Print '本班成绩优秀,前三名成绩为:'
Select top 3 * from score order by score desc
End
Else
Begin
Print '本班成绩较差,后三名成绩为:'
Select top 3 *from score order by score
End
23.while循环语句: while(条件)
Begin
语句1
语句2..........
Break
End
例:DECLARE @n int
WHILE(1=1) --条件永远成立
BEGIN
SELECT @n=COUNT(*) FROM score
WHERE score<60 --统计不及格人数
IF (@n>0)
UPDATE score --每人加2分
SET score=score+2
ELSE
BREAK --退出循环
END
print '加分后的成绩如下:'
SELECT * FROM score
24.case--end多分支语句
语法: case
When 条件1 then 结果1
When 条件2 then 结果2
..............
Else 其他结果
End
例:print 'ABCDE五级显示成绩如下:'
Select studentID,
成绩=case
When score<60 then'E'
When score between 60 and 69 then 'D'
When score between 70 and 79 then 'C'
Else 'A'
End
From score
25.批处理语句示例:
SELECT * FROM stuInfo
SELECT * FROM stuMarks
UPDATE stuMarks
SET writtenExam=writtenExam+2
GO
26.习题及答案:
习题内容:则根据如下规则对成绩进行反复加分,直到平均分超过85分为止。请编写T-SQL语句实现。
90分以上: 不加分
80-89分: 加1分
70-79分: 加2分
60-69分: 加3分
60分以下: 加5分
习题答案:
SELECT * FROM score --原始成绩 DECLARE @labAvg int WHILE(1=1) BEGIN UPDATE score SET score= CASE WHEN score<60 THEN score+5 WHEN score between 60 AND 69 THEN score+3 WHEN score between 70 AND 79 THEN score+2 WHEN score between 80 AND 89 THEN score+1 ELSE score END SELECT @labAvg=AVG(score) FROM score IF @labAvg>=85 BREAK END SELECT * FROM score --加分后的成绩
27.把一个表中的数据复制到另一个表中: insert into <表名>(列名)
Select <列名>
From <源表名>
28.把查询结果放在新表中同时插入新的标识列:
Select 列名 identity(数据类型,标识种子,标识增长量)as
列名 into 新表 from 原始表
例: select students.sname, students.saddress, students.semail, identity(int,1,1) as studentID into tongxunlu from students
29.更新数据行:
语法: update<表名>
Set<列名=更新值>
Where <更新条件>
例: update students
Set address='软件学校'
Where address='软件学院'
30.问题:按多列排序:例:select no,name,address,grade
From students
Where sex in(1,0)
Order by no,grade
31.字符串函数:
Replace: select replace('莫勒可切.杨可','可',‘兰') 返回结果:莫勒兰切.杨兰 Upper: select upper('sql server 课程') 返回结果:SQL SERVER 课程 Getdate: select getdate()获取当前时间。 Dateadd: select dateadd(mm,4,'01/01/2009') 返回结果:05/01/2009 Datename: select datename(dw,'01/15/2000') 返回结果: Saturday
32.聚合函数:
Max-min: select AVG(score) as 平均成绩,MAX(score) as 最高分,MIN(score) as最低分 from score where score>=60
Count: select count(*)as 及格人数 from score
Where score>=60
33. 分组查询:
select courseid,avg(score) as 课程平均成绩
From score
Group by courseid
34.习题:
假如成绩单中记录了学生的几次考试成绩,要查询每位学生的每门课的总成绩,怎么查?
Select courseid,studentid,sum(score) as 总成绩 From score Group by courseid,studentid
35.分组查询--HAVING
Having:指定了组或聚合的搜索条件,常常与group by子句一起使用。
例:
select studentid as学员编号,avg(score)as 平均成绩 From score Group by studentid,couseid Having avg(score)>60
36.多表查询——内联结
例:
select students.smame, score.courseid, score.score
From students,score
Where students.scode=score.studentid
37.多表联结——三表联结
例:
select S.name as姓名,CS.coursename as课程,C.score as 成绩 from students As S
Inner Join score as C ON(S.scode=C.studentid)
Inner join course As CS ON(CS.courseid=C.courseid)
38.多表联结查询——右外联结
例:
select titles.title_id,Titles.title,publishers.pub_name From titles Right outer join publishers On titles.pub_id=publishers.pub_id
39.银行案例——多表联结——左外联结:
例:
intsert into account(account.Cardid,account.score) Select users.cardid,2 From users Left Join account ON(account.cardid=users.cardid) Where account.cardid is NULL
40.子查询:
例:
select * from students Where scode>(select scode from students where Sname='张扬') GO
41.例:内联结(等值联结)
select sname from students Inner Join score ON students.scode=score.studentid Where score=60 GO
42.局部变量:
例:将姓名为里斯的学生的学号,出生日期和平均成绩分别赋给局部变量
@no_str @birthday_str @avgrade_num (用select语句来实现)
Select @no_str=s_no,@birthday_str=s_birthday,@avgrade_num=s_avgrade
From student where s_name='里斯'
43.自连接查询:
例:(注:student2为不存在,是创建的)
Select student2.sno学号,student2.sname姓名,student2.ssex性别,student2.sspeciality专业,student2.savgrade平均成绩 From student,student2 Where student.sname='李好' and student.sspeciality=student2.sspeciality
44.声明局部变量:declare @变量名 数据类型
45.if语句 例:查询学号为457865的学生,如果成绩及格,则打印其姓名和成绩。
Declare @no,char(8),@name char(8),@avgrade numeric(3,1) Set @no='457865' Select @name=sname,@avgrade=savgrade From student Where sno=@no; If @avgrade>60.0 Begin Print @name Print @avgrade End Go
46.if-else语句:对于给定学号的查询,如果平均成绩不及格则打印姓名和平均成绩,否则打印学号。
Declare @no char(8),@name char(8),@avgrade numeric(3,1); Set @no='567'; Select @name=sname,@avgrade=savgrade From student Where sno=@no; If @avgrade<60.0 Begin Print @name Print @avgrade End Else Print @no Go
47.多分支的if语句查询并实现分等级打印学生成绩
Declare @no char(8),@name char(8),@avgrade numeric(3,1); Set @no='567'; Select @name=sname,@avgrade=savgrade From student Where sno=@no; If @avgrade>=90.0 Print ‘优秀' Else if @avgrade>=80.0 ……………. Else print ‘不及格' Go
48.case 语句 使用select语句查询学生的学号,然后用case函数对学生的姓名和爱好进行简要说明。
Select 学号=sno,姓名及爱好= Case sno When ‘123' then ‘李好,游泳' 。。。。。。。 Else ‘没有这人' End From student
49.while语句
(如果学生平均成绩低于85分,则循环执行对每位学生成绩加0.5%,在循环过程中,如果最高成绩超过95分则退出循环;在加分过程中,当成绩的平均成绩大于或等于80分时打印出当前成绩的平均成绩)
Declare @avgrade numeric(3,1); Set @avgrade=(select avg(savgrade) from student) While @avgrade<85 Begin Update student Set savgrade=savgrade+savgrade*0.005 Set @avgrade=(select avg(savgrade) from student) If @avgrade>95 Break --退出循环 if@avgrade<80 continue --结束本次循环 print @avgrade End
50.子查询:查询成绩刚好通过60分的学生
Select sname from students Inner Join score ---内连接 ON students.scode=score.studentid Where score=60 Go
51.事务的特性:原子性、一致性、隔离性、永久性。
事务分类:显示事务、隐性事务、自动提交事务。
52.系统存储过程的名称都以“sp_”开头或“xp_”开头。
EXEC sp_databases 列出当前系统的数据库
EXEC sp_help students 查看表students的信息
53.定义存储过程的语法:
Create proc[edure] 存储过程名
@参数1 数据类型=默认值 output,
...................
@参数n 数据类型=默认值 output
As
SQL语句
Go (注:参数可选,参数分输入参数、输出参数,输入参数允许有默认值)
54.创建不带参数的存储过程:
例:
Creat procedure pro_stu As Declare @myAvg float Select @myAvg=AVG(score) From score Print '平均分:'+convert(varchar(5),@myAvg) If(@myAvg>70) Print '本班考试成绩:优秀' Else Print '本班考试成绩:较差' Print '-----------------------------------------------------------' Print '参加本次考试没有通过的学员:' Select name,scode,score From students inner Join score on Students.scode=score.studentid where score<60 GO
55.调用存储过程: 语法: EXEC 过程名[参数] 例:EXEC proc_stu
56.输入参数的默认值:
例:
Create procedure proc_stuMn @scorePass int=60 ---及格线默认为60分 As Print '及格线:' +convert(varchar(5),@scorePass) Print '参加本次考试没有通过的学员:' Select name,scode,score From students Inner Join score On students.scode=score.studentid Where score<@scorePass Go
57.调用带参数默认值的存储过程:
EXEC proc_stu -------采用默认值
EXEC proc_stu 55 ------不采用默认值
EXEC proc_stu @scorePass=55
58.带输出参数的存储过程:
Create procedure proc_stuM @notpassSum int output, @scorePass int=60 As Print'及格线:'+convert(varchar(5),@scorePass) Print '参加本次考试没有通过的学员:' Select name,scode,score from students Inner Join score On students.scode=score.studentid Where score<@scorePass Select @notpassSum=count(studentid) From score where score<@scorePass GO
59.调用带输出参数的存储过程:(注:调用时必须带output关键字,返回结果将存放在变量@sum 中)
Declare @sum int EXEC proc_stuM @sum output,60 Print '--------------------------------------------------' If @sum>=3 Print '未通过人数:'+convert(varchar(5),@sum )+'人,超过60%,及格分数线还应下调' Else Print '未通过人数:'+convert(varchar(5),@sum )+'人,已控制在60%以下,及格分数线适中' GO
60.错误处理:
使用Raiserror语句:
Create procedure pro_stuM @notpassSum int output, @scorePass int=60 As If(not @scorePass between 0 and 100) Begin Raiserror('及格线错误,请指定0—100之间的分数,统计中断退出',16,1) --------引发系统错误,指定错误的严重级别16,调用状态为1(默认),并影响@@ERROR 系统变量的值 Return --------立即返回,退出存储过程 End ...............其他语句同上例 Go
61.使用raiserror语句
Declare @sum int,@t int EXEC proc_stum @sum output, 604 ----笔试及格线误输入604分 Set @t=@@error Print '错误号:'+convert(varchar(5),@t ) If @t<>o Return ------退出批处理,后续语句不再执行 Print '-----------------------------------' -----如果执行了raiseerror语句,系统全局@@error 将不等于0,表示出现了错误. If @sum>=3 Print '未通过人数:'+convert(varchar(5),@sum)+'人,超过了60%,及格分数线还应下调' Else print '未通过人数:'+convert(varchar(5),@sum)+'人,已控制在60%以下,及格分数线适中' GO 62.调用存储过程: 例: Declare @s int Exec proc_stuinfo '张三' ,@s , 30 ———错误!应为(exec proc_stuinfo '张三',@s output,30) Exec proc_stuinfo '张三' ,@s ————错误!应为(exec proc_stuinfo '张三',@s output) Exec proc_stuinfo @sAge=22,@stuName='李四',@m=@s output(正确!)
63.带输出参数的存储过程:
例:
Declare @sum int Exec proc_stuM @sum output,60 Print '-----------------------------------------' If @sum>=3 Print'未通过人数:'+convert(varchar(5),@sum )+'人,超过60%,及格分数线还应下调' Else Print'未通过人数:'+convert(varchar(5),@sum )+'人,已控制在60…60%以下,及格分数线适中' GO
64.创建触发器语法:
Create trigger trigger_name On table_name [with encryption] --------表示加密触发器定义的SQL文本 For [delete,insert,update] -------指定触发器类型 As T_SQL语句 GO
65.Insert 触发器
例:
Create trigger trig_transInfo On transInfo For insert As Declare @type char(4),@outMoney Money Declare @myCardID char(10),@balance Money Declare @currentMoney money Select @type=transType,@outMoney=transMoney,@myCardID=cardID from inserted If(@type='支取') Update bank set currentMoney=currentMoney-@outMoney Where cardID=@myCardID Else Update bank set currentMoney=currentMoney+@outMoney Where cardID=@myCardID
66. 插入一条语句
例:
Insert into transInfo(transType,transMoney,cardID) Values ('支取',200,'10011001') 67. Delete触发器示例: Create trigger tri_delete_transInfo On transInfo For delete As Print '开始备份数据,请稍候......' If not exists(select * from sysobjects where name='backupTable') Select * into backupTable from deleted ------------从deleted表中获取被删除的交易记录。 Else Insert into backupTable select * from deleted Print '备份数据成功,备份表中的数据为:' Select * from backupTable Select * from transInfo GO
68. Update 触发器:
Create trigger trig_update_bank On bank For update As Declare @beforeMoney Money,@afterMoney Money Select @beforeMoney=currentMoney from deleted -------(从deleted表中获取交易前的金额,从inserted表中获取交易后的余额) Select @afterMoney=currentMoney from inserted If ABS(@afterMoney-@beforeMoney)>20000 ------交易金额是否>2万 Begin Print '交易金额:'+convert(varchar(8), ABS(@afterMoney-@beforeMoney)) Raiserror ('每笔交易不能超过2万元,交易失败',16,1) Rollback transaction ------------回滚事务,撤销交易 End Go
69. 列级update触发器
Create trigger trig_update_transIfo ON transInfo For update As If update(transDate) Begin -------检查是否修改了交易日期列transDate Print '交易失败......' Raiserror('安全警告:交易日期不能修改,由系统自动产生',16,1) Rollback transaction ----------回滚事务,撤销交易 End GO
70.数据库阶段数据管理的主要特点:1.采用数据模型表示复杂的数据结构;2.有较高的数据独立性;3.为用户提供了方便的用户接口;4.提供数据控制功能;5.增加系统 的灵活性。
71. DB(数据库):存储在计算机内有组织的、统一管理的相关数据的集合。
DBMS(数据库管理系统):位于用户与操作系统之间的数据管理软件。
DBS(数据库系统):是实现有组织的、动态的存储大量关联数据,以方便用户访问计算就硬件、软件和株距资源组成的计算机系统。
72.物理数据独立性和逻辑数据独立性:
物理数据独立性:内模式的修改,只需对模式/内模式映象做相应修改,而不需修改 概念模式。逻辑数据独立性:概念模式的修改,只需对外模式/模式映象做相应修改,而不
需修改外模式。
73. DBMS的主要功能:
数据定义(DDL):三级结构、两级映象、完整性约束等。数据操纵(DML):检索、更新。数据保护:数据恢复、并发控制、完整性控制、安全性控制等。数据维护:数据载入、转换、存储、、性能监控等。数据字典(DD):存储三级结构定义的数据库称为DD,即系统数据库。DBMS主要功能:数据库定义功能、数据存取功能、数据库运行管理功能、数据库的建立和维护功能。
74.--1、创建存储过程--
if exists (select * from sysobjects where name='Sum_wage') drop procedure Sum_wage GO create procedure Sum_wage @PWage int, @AWage int, @total int as while (1=1) begin if (select count(*) from ProWage)>2*(select count(*) from ProWage where Wage>=@PWage) update ProWage set @total=@total+@AWage,Wage=Wage+@AWage else break end print'一共加薪:'+convert(varchar,@total)+'元' print'加薪后的程序员工资列表:' select * from ProWage --调用存储过程1-- exec Sum_wage @PWage=2000,@AWage=100,@total=0 exec Sum_wage @PWage=2200,@AWage=100,@total=0 exec Sum_wage @PWage=3000,@AWage=100,@total=0 exec Sum_wage @PWage=4000,@AWage=100,@total=0 exec Sum_wage @PWage=5000,@AWage=100,@total=0 exec Sum_wage @PWage=6000,@AWage=100,@total=0
75.
if exists (select * from sysobjects where name='Avg_wage') drop procedure Avg_wage GO create procedure Avg_wage @PWage int, @AWage int, @total int as while (1=1) begin if ((select Avg(Wage) from ProWage)<=@PWage) update ProWage set @total=@total+@AWage,Wage=Wage+@AWage else break end print'一共加薪:'+convert(varchar,@total)+'元' print'加薪后的程序员工资列表:' select * from ProWage --调用存储过程-- exec Avg_wage @PWage=3000,@AWage=200,@total=0 exec Avg_wage @PWage=4500,@AWage=200,@total=0
76.代码:
INSERT INTO studentinformation(S_name,S_no,S_grade,S_address) VALUES('花无影',25,'软件0802班','河北') select studentinformation.S_name,studentinformation.S_no into information2 from studentinformation select S_no,S_grade,S_name from studentinformation where S_school='软件学院' order by S_no select S_no,S_name,S_class from studentinformation where S_sex='男'and S_name<>'花无影' order by S_no SELECT top 20 percent sname as 姓名,sno as 学号,saddress as 地址 FROM yuan WHERE sschool ='软件学院' ORDER BY sno asc,sname desc select charindex('data','my data is set',1) (data的索引位置) select len('java xuexibiji') (字符串长度) select lower('BAO DING DIANLI ZHI YE JI SHU XUE YUAN') (转换成小写) select replace('软件学院','软件学院','软件工程学院') (替换) select stuff('a b c d e f g h i j k l m n',3,6,'今天的学习内容') (从第三字符个开始替换,替换6个字符) select getdate() (当前日期) select dateadd(dd,250,'04/12/2009') (250天后的日期) select datediff(mm,'04/20/2005','08/05/2010') (相差的月数) select datename(dw,'04/12/2009') (返回星期几) select datepart(dd,'04/12/2009') (返回当天是几号) select abs(-10) 绝对值 select ceiling(-32.8) 返回大于或等于该数的最小整数 select power(102,3) 取数值表达式的幂值 select round(3.141592653,4) (?)将数值表达式四舍五入成指定精度 select sign(1000) 正数返回1,负数返回-1,0返回0. select sqrt(6.25) //返回该数据的平方根 select convert(varchar(100),45678932) //转变数据类型 select current_user //返回当前用户的名字 select datalength('软件学院') //返回字符长度 select host_name() //返回用户登录的计算机名 select system_user //返回登录的用户名 select user_name(1) //从任意数据库中返回dbo(jizhu) create proc pro_stu @scorepass float as print '学号'+convert(varchar(5),@scorepass) select name from stuent where student.score=@scorepass go exec pro_stu @scorepass=85
76.导出SQL Server数据库中数据:
declare @objectId int set @objectId=object_id('sun') if @objectId is not null begin drop proc sun end go create proc sun (@tablename varchar(256)) as begin set nocount on declare @sqlstr varchar(4000) declare @sqlstr1 varchar(4000) declare @sqlstr2 varchar(4000) select @sqlstr='select ''insert '+@tablename select @sqlstr1='' select @sqlstr2='(' select @sqlstr1='values (''+' select @sqlstr1=@sqlstr1+col+'+'',''+' ,@sqlstr2=@sqlstr2+name +',' from (select case when a.xtype =173 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.length*2+2)+'),'+a.name +')'+' end' when a.xtype =104 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(1),'+a.name +')'+' end' when a.xtype =175 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end' when a.xtype =61 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'convert(varchar(23),'+a.name +',121)'+ '+'''''''''+' end' when a.xtype =106 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.xprec+2)+'),'+a.name +')'+' end' when a.xtype =62 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(23),'+a.name +',2)'+' end' when a.xtype =56 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(11),'+a.name +')'+' end' when a.xtype =60 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(22),'+a.name +')'+' end' when a.xtype =239 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end' when a.xtype =108 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.xprec+2)+'),'+a.name +')'+' end' when a.xtype =231 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end' when a.xtype =59 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(23),'+a.name +',2)'+' end' when a.xtype =58 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'convert(varchar(23),'+a.name +',121)'+ '+'''''''''+' end' when a.xtype =52 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(12),'+a.name +')'+' end' when a.xtype =122 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(22),'+a.name +')'+' end' when a.xtype =48 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(6),'+a.name +')'+' end' when a.xtype =165 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.length*2+2)+'),'+a.name +')'+' end' when a.xtype =167 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end' else '''NULL''' end as col,a.colid,a.name from syscolumns a where a.id = object_id(@tablename) and a.xtype <>189 and a.xtype <>34 and a.xtype <>35 and a.xtype <>36 )t order by colid select @sqlstr=@sqlstr+left(@sqlstr2,len(@sqlstr2)-1)+') '+left(@sqlstr1,len(@sqlstr1)-3)+')'' from '+@tablename print @sqlstr exec( @sqlstr) set nocount off end go
相关推荐
SQL数据库(SQL Server)基础知识思维导图(整理版),较之前的版本,进行了一些整理,具体内容没变
在这一讲中,我们将介绍SQL Server 2005的基础架构和主要功能,包括数据库引擎、Analysis Services(分析服务)、Integration Services(集成服务)和Reporting Services(报告服务)。我们还会探讨SQL Server 2005...
本篇文章将深入探讨SQL Server索引的基础知识,包括数据页的概念、页的结构、不同类型的数据页以及对大型行的支持。 首先,SQL Server中的数据存储是以数据页(Page)为基础单位的。数据页是8KB大小的逻辑单位,...
**SQL Server 2005基础教程** ...本教程的PPT将详细解释这些知识点,并结合实例,使读者能够轻松上手SQL Server 2005。无论是开发人员还是DBA,都能从中受益,为日常数据库管理工作打下坚实基础。
SQL数据库(SQL Server)基础知识思维导图(最终版),较之前的版本,进行了一些修改整理。
SQLSERVER复习资料整理 在IT领域,SQL Server是一款由微软公司开发的关系型数据库管理系统,它在数据存储、处理和管理方面扮演着至关重要的角色。这篇复习资料主要针对SQL Server数据库课程,涵盖了考试题和重修...
本文基于给定的文件信息,将详细解析数据挖掘的概念、处理过程,以及在SQLServer2005中的具体应用。 ### 数据挖掘:发现隐藏知识的艺术 数据挖掘,顾名思义,是从海量数据中挖掘出有价值的信息和知识的过程。随着...
以下是一些关键的知识点,旨在帮助你理解和改进SQL Server 2005的查询性能。 1. **索引优化**:索引是提升查询速度的关键。非聚簇索引和聚簇索引各有优势,应根据数据访问模式选择合适的索引类型。创建合适的索引...
例如,60代表SQL Server 6.0,90代表SQL Server 2005。这影响了查询解析、执行计划以及某些数据库功能的行为。 4. **创建数据库**:使用`CREATE DATABASE`语句可以创建新的数据库。在创建过程中,可以指定数据库...
### Sqlserver2005/2008 BI视频课程 这套视频课程聚焦于SQL Server的商业智能(BI)功能,包括数据分析服务(Analysis Services)、报表服务(Reporting Services)和集成服务(Integration Services)。通过实际...
综上所述,《精通SQL Server 2005》涵盖了数据库设计基础、SQL语言使用、事务处理和权限管理等多个方面,是学习和掌握SQL Server 2005不可或缺的参考资料。对于数据库管理员和开发人员来说,理解并熟练运用这些知识...
通过深入学习和实践上述知识点,你将能够熟练地使用SQL Server 2000和SQL Server 2005进行数据管理、查询优化以及复杂的数据分析,为企业的数据基础设施提供坚实的基础。而提供的例题可以帮助你更好地理解和应用这些...
### SQLServer管理员手册知识点概述 #### 一、SQL Server 2000概览 - **SQL Server系统介绍**:本章节将详细介绍SQL Server 2000的基础知识,包括其核心组件、服务以及与其他软件的集成方式。 - **新特性和功能**:...
根据提供的文件信息,我们可以整理出一系列与SQL Server相关的知识点,主要涵盖了SQL Server的基本概念...通过以上知识点的学习,可以更好地理解和掌握SQL Server的基础知识和常用操作,为后续深入学习打下坚实的基础。
不管你信不信,理解“黑盒”知识几乎可以在Microsoft SQL Server的所有方面起到帮助作用,例如从备份与存储到复制与镜像。 SQL Server运作的简短课程 实现SQL Server 2008中的文件流功能 SQL Server 2008中最新...
本教程覆盖了数据库管理系统的基础知识,SQL语言的应用,以及SQL Server 2005的特性和管理工具。 一、SQL Server 2005概述 SQL Server 2005是微软公司推出的企业级关系型数据库管理系统,广泛应用于数据存储、分析...
SQL语句相关 DDL:数据定义语言(物理级别->在硬盘上创建或者删除) 创建数据库:CREATE database 名称 删除数据库:DROP database 名称 定位到数据库:USE 名称 设置自增:identity(起始值,自增值), 非空约束:not ...
总结,本压缩包提供的资源涵盖了Java编程的基础知识、SQL Server数据库管理和数据结构的学习资料,以及一款辅助学习和知识管理的软件MindManager。通过深入学习这些内容,不仅可以掌握编程技能,还能提高数据管理和...