Tsql8.docx
- 文档编号:10564438
- 上传时间:2023-02-21
- 格式:DOCX
- 页数:18
- 大小:270.61KB
Tsql8.docx
《Tsql8.docx》由会员分享,可在线阅读,更多相关《Tsql8.docx(18页珍藏版)》请在冰豆网上搜索。
Tsql8
第八章T-SQL语言编程
1.回顾上一章:
[10分钟]2
2.课程知识点讲解:
2
2.1.变量的定义与赋值:
[25分钟]2
2.2.输出显示数据:
[15分钟]3
2.3.if、while、case逻辑控制语句:
[30分钟]4
2.4.sql中的批:
[30分钟]5
3.本章总结[10分钟]7
4.考核点7
5.测试题7
6.扩展部分常见编程错误7
7.学生问题汇总7
8.作业7
●本章主要目标
⏹本章的目标是向学生介绍T-SQL语言编程的概念与实现。
1.掌握如何定义变量并赋值
2.掌握如何输出显示数据
3.掌握IF、WHILE、CASE逻辑控制语句
4.理解SQL中批的概念
●本章重点
⏹掌握如何定义变量并赋值
⏹掌握IF、WHILE、CASE逻辑控制语句
⏹理解SQL中批的概念
●本章难点
⏹CASE-END多分支语句
1.回顾上一章:
[10分钟]
建库的语法?
补充下列语句:
IFEXISTS(SELECT*FROM?
WHEREname='stuDB')
DROPDATABASEstuDB
建表的语法?
补充下列语句:
IFEXISTS(SELECT*FROM?
WHEREname='stuDB')
DROPTABLEstuInfo
解释下列语句的含义?
EXECsp_addlogin'zhangsan','1234'
EXECsp_grantdbaccess'zhangsan','zhangsanDBUser'
ALTERTABLEstuInfo
ADDCONSTRAINT?
PRIMARYKEY(stuNo)
ALTERTABLEstuInfo
ADDCONSTRAINTUQ_stuID?
ALTERTABLEstuInfo
ADDCONSTRAINTDF_stuAddress?
ALTERTABLEstuInfo
ADDCONSTRAINTCK_stuAge
CHECK(?
)
ALTERTABLEstuMarks
ADDCONSTRAINTFK_stuNo
FOREIGNKEY?
REFERENCES?
2.课程知识点讲解:
2.1.使用变量:
[25分钟]
●知识点讲解1
和C语言一样,变量分为:
❑局部变量:
❑局部变量必须以标记@作为前缀,如@age
❑局部变量的使用也是先声明,再赋值
❑全局变量:
❑全局变量必须以标记@@作为前缀,如@@version
❑全局变量由系统定义和维护,我们只能读取,不能修改全局变量的值
注意和c语言中的对比。
引例讲解:
声明局部变量
DECLARE@变量名数据类型
例如:
DECLARE@namevarchar(8)
DECLARE@seatint
赋值
SET@变量名=值
SELECT@变量名=值
例如:
SET@name=‘张三’
SELECT@name=stuNameFROMstuInfo
WHEREstuNo=‘s25302’
讲解要点:
1.先声明再赋值;
2.赋值有两种方式:
1)使用set
2)使用select
讲讲它们分别应在什么场合使用。
set用于普通的赋值
select用于从表中查询数据并赋值
3.使用select语句赋值时,必须保证筛选的记录只有1条,否则取最后一条,可演示证明。
所以T-SQL语句后面一般接WHERE筛选条件。
学生信息表如下:
问题:
编写T-SQL查找李文才的左右同桌?
分析:
第一步,找出“李文才“的座位号;
第二步,李文才的座位号加1或减1
提问:
如何编写T-SQL查找李文才的左右同桌?
即张秋丽和李斯文,向学生解释,为了简单起见,这里的同桌指左右两边的同学。
引导:
第一步,找出“李文才“的座位号;
第二步,李文才的座位号加1或减1
让学生先在练习本上编写,然后再讲解答案。
说明:
为了演示方便,演示前可预先使用企业管理器修改数据。
为了修改数据方便,可以在表的设计视图中修改表结构,取消座位列stuSeat标识列的设置。
为了设置显示结果的字体,可以在查询分析器中,单击菜单:
工具->选项,在“字体”面板中,
选择左边的结果表格,然后设置放到字体即可,放大编辑器中的SQL文本字体也同理。
/*--查找李文才的信息--*/
DECLARE@namevarchar(8)--学生姓名
SET@name='李文才'--使用SET赋值
SELECT*FROMstuInfoWHEREstuName=@name
/*--查找李文才的左右同桌--*/
DECLARE@seatint--座位号
SELECT@seat=stuSeatFROMstuInfo--使用SELECT赋值
WHEREstuName=@name
SELECT*FROMstuInfo
WHERE(stuSeat=@seat+1)OR(stuSeat=@seat-1)
GO
全局变量都使用两个@标志作为前缀
变量
含义
@@ERROR
最后一个T-SQL错误的错误号
@@IDENTITY
最后一次插入的标识值
@@LANGUAGE
当前使用的语言的名称
@@MAX_CONNECTIONS
可以创建的同时连接的最大数目
@@ROWCOUNT
受上一个SQL语句影响的行数
@@SERVERNAME
本地服务器的名称
@@TRANSCOUNT
当前连接打开的事务数
@@VERSION
SQLServer的版本信息
老师提问:
问题1:
全局变量和局部变量的区别?
答:
全局变量是系统定义,用户可以使用的变量。
局部变量是用户定义用户使用的变量
2.2.输出显示数据:
[15分钟]
语法格式:
常用的输出语句有两种;
1print局部变量或者字符串
2SELECT变量AS自定义列名
示例
Print‘服务器的名称:
’+@@SERVERNAME
SELECT@@SERVERNAMEAS‘服务器名称’
2.3.if-else语句:
[10分钟]
1语法格式:
同C语言一样:
●ELSE是可选部分
●如果有多条语句,才需要BEGIN-END语句块
/*生活范例名称:
求职
前提条件:
上网站查询工作信息
If(薪水>3000)
{显示满足条件的工作招聘信息}
Else
{显示“无符合条件的招聘信息,请重新选择”}
示例如下:
学生信息表:
问题:
统计并显示本班笔试平均分,如果平均分在70以上,显示“成绩优秀“,并显示前三名学生的考试信息;如果在70以下,显示“本班成绩较差“,并显示后三名学生的考试信息。
分析:
第一步,统计平均成绩存入临时变量;
第二步,用IF-ELSE判断;
2.4.while循环语句:
[10分钟]
语法格式:
讲解要点:
1.先从C语言的while语句,引出SQL的WHILE语句,便于学生接受。
2.强调:
1)BREAK的含义
2)如果有多条语句,才需要BEGIN-END语句块
如学生成绩单
问题:
本次考试成绩较差,假定要提分,确保每人笔试都通过。
提分规则很简单,先每人都加2分,看是否都通过,如果没有全部通过,每人再加2分,再看是否都通过,如此反复提分,直到所有人都通过为止。
分析:
第一步,统计没通过的人数;
第二步,如果有人没通过,加分;
第三步,循环判断。
讲解时要注意:
1.向学生仔细说明循环加分规则。
2.提问学生编写T-SQL的实现思路。
3.让学生在练习本上预先编写,然后在公布答案,这样他们才会记忆深刻。
4.可以给出适当提示:
统计函数selectcount(*)fromstuMarkswherewrittenExam<60
用于统计没通过的学生人数。
2.5.CASE多分支语句:
[10分钟]
语法格式:
问题:
采用美国的ABCDE五级打分制来显示笔试成绩。
A级:
90分以上
B级:
80-89分
C级:
70-79分
D级:
60-69分
E级:
60分以下
使用如下学生成绩表
讲解要点:
CASE-END的语法比较难于理解,要注意放慢速度讲解。
1.多分支部分整体是一条非常简单的语句:
SELECTstuNo,成绩=某个值FROMstuMarks
2.成绩是别名,等价使用AS。
3.成绩后的值不确定,它的值由CASE-END多分支决定。
CASE语句根据每条记录中笔试成绩,进行判断,结果是A还是B等。
4.学生明白后,强调CASE-END的语法配对,如蓝色标识的部分。
课堂练习:
请根据平均分和下面的评分规则,编写T-SQL语句查询学生的成绩,如上图所示。
优:
90分以上
良:
80-89分
中:
70-79分
差:
60-69分
不及格:
60分以下
由于CASE-END对于学生来说难于理解,补充示例讲解。
1.应该请学生在练习本上编写,并视情况抽取个别学生到讲台用白版笔书写。
2.给予提示:
求平均分:
(writtenExam+labExam)/2<60
3.然后讲解答案,指出学生的错误。
USEstuDB
GO
SELECT考号=ExamNo,学号=stuNo,笔试=writtenExam,机试=labExam,
平均分=(writtenExam+labExam)/2,
等级=CASE
WHEN(writtenExam+labExam)/2<60THEN'不及格'
WHEN(writtenExam+labExam)/2BETWEEN60AND69THEN'差'
WHEN(writtenExam+labExam)/2BETWEEN70AND79THEN'中'
WHEN(writtenExam+labExam)/2BETWEEN80AND89THEN'良'
ElSE'优'
END
FROMstuMarks
2.6.批处理语句:
[30分钟]
批处理的概念
引入生活范例:
/*生活范例名称:
多人排队进门
*
*要点:
帮助理解批处理的概念
十个人进一个门,每个人都要做开门关门的动作。
然后是十个人依次进门,只是头一个开门,最后一个关门。
比较两种操作序列的优缺点。
关门的动作标志进门的结束,在SQL中对应的批处理的结束标志是GO
批处理是包含一个或多个SQL语句的组,从应用程序一次性地发送到SQLServer执行
SQLServer将批处理语句编译成一个可执行单元,此单元称为执行计划。
执行计划中的语句每次执行一条
SELECT*FROMstuInfo
SELECT*FROMstuMarks
UPDATEstuMarks
SETwrittenExam=writtenExam+2
GO
●GO是批处理的标志,表示SQLServer将这些T-SQL语句编译为一个执行单元,提高执行效率
●一般是将一些逻辑相关的业务操作语句,放置在同一批中,这完全由业务需求和代码编写者决定
此时应该强调:
1.批处理的标志GO
2.批处理的好处速度快等
SQLServer规定:
如果是建库、建表语句、以及我们后面学习的存储过程和视图等,则必须在语句末尾添加GO批处理标志再次强调语句规范性
3.本章总结[10分钟]
●和c语言非常相似,变量的使用也是先声明,然后再赋值局部变量前面必须有一个@标记,全局变量前面是两个@@标记。
●变量的赋值有两种方式:
使用SET语句或SELECT语句。
●输出结果也有两种方式:
print语句和SELECT语句。
●控制流语句提供了条件操作所需的顺序和逻辑。
●语句块使用BEGIN。
。
。
END。
●批处理可以提高语句执行的效率,批处理结束的标志是GO。
4.考核点
考核点1:
局部变量和全局变量的区别以及分别赋值
考核点2:
批处理的结束标志以及sqlserver中对一些sql必须用go结束语句特殊要求
5.测试题
测试题1:
测试题2:
6.扩展部分常见编程错误
扩展部分1:
oracle中的pl/sql语句一行不能太长,强调规范性
扩展部分2:
T-SQL调用动态链接库
一般我们要根据数据库的纪录变化时,进行某种操作。
我们习惯的操作方式是在程序中不停的查询表,判断是否有新纪录。
这样耗费的资源就很高,如何提高这种效率,我想在表中创建触发器,在触发器中调用外部动态连接库通过消息或事件通知应用程序就可实现。
而master的存储过程中最好能调用外部的动态连接库,我们在触发器中调用master的存储过程即可。
我们来实现一个存储过程中调用外部的dll(storeproc.dll)的函数SetFileName和addLine。
存储过程如下(需放到master库中):
CREATEPROCEDUREsp_testdllAS
execsp_addextendedproc''SetFileName'',''storeproc.dll''--声明函数
execsp_addextendedproc''addLine'',''storeproc.dll''
declare@szFileNamevarchar(200)
declare@szTextvarchar(200)
declare@rtint
Select@szFileName=''c:
\welcome.txt''
EXEC@rt=SetFileName@szFileName--调用SetFileName函数,参数为--szFileName;
if@rt=0
begin
select@szText=''welcome01''
Exec@rt=addLine@szText--调用addLine
select@szText=''welcome02''
Exec@rt=addLine@szText
end
execsp_dropextendedproc''SetFileName''
execsp_dropextendedproc''addLine''
dbccSetFileName(free)
dbccaddLine(free)
动态连接库的实现:
这种动态连接库和普通的有所不同。
该动态连接库要放入SQL的执行目录下,或直接放到Window的System32目录下,并重起SQL-Server
7.学生问题汇总
学生问题1:
对批处理的结束标志概念不清楚
Caseend的分块
8.作业
习题1:
编写一段SQL语句,可以重复执行创建同一视图的动作
习题2:
P46的作业
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Tsql8