T-SQL编程
- 格式:ppt
- 大小:169.00 KB
- 文档页数:47


在 SQL 中,循环语句通常用于执行需要重复执行的任务。然而,请注意,SQL 本身并不直接支持循环语句,因为它是一种集合型语言,旨在处理一组数据记录,而不是单个记录。
尽管如此,大多数 SQL 数据库管理系统(DBMS)提供了存储过程或函数等编程构造,允许你使用条件语句和循环逻辑。以下是几个常见的示例:
1. MySQL 和 MariaDB 使用 WHILE 循环:
```sql
DELIMITER //
CREATE PROCEDURE while_loop_example()
BEGIN
DECLARE counter INT DEFAULT 1;
WHILE counter \u003c= 10 DO
-- 在此处执行你的逻辑
SELECT counter;
SET counter = counter + 1;
END WHILE;
END //
DELIMITER ;
```
2. Oracle 使用 PL/SQL,它支持 WHILE、FOR 和 LOOP 循环:
```sql
CREATE OR REPLACE PROCEDURE loop_example IS
counter NUMBER := 1;
BEGIN
LOOP
-- 在此处执行你的逻辑
DBMS_OUTPUT.PUT_LINE(counter);
counter := counter + 1;
EXIT WHEN counter \u003e 10; -- 退出循环的条件
END LOOP;
END;
```
3. SQL Server 使用 T-SQL,支持 WHILE 和 FOR 循环:
```sql
CREATE PROCEDURE while_loop_example AS
问题:
统计并显示某课程平均分,如果平均分在70以上,显示“成绩优秀“,并显示前三名学员的考试信息;如果在70以下,显示“本班成绩较差“,并显示后三名学员的考试信息 。
分析:
第一步,统计平均成绩存入临时变量;
第二步,用IF-ELSE判断;
declare @q int
select @q = avg(degree) from sc
select '本班平均分'+ convert(varchar(5),@q)
if(@q>70)
begin
print'成绩优秀,前三名成绩为:'
select top 3 * from sc order by degree desc
end
else
begin
print'成绩较差,前后三名成绩为:'
select top 3 * from sc order by degree
end
问题:
某课程本次考试成绩较差,假定要提分,确保每人笔试都通过。提分规则很简单,先每人都加2分,看是否都通过,如果没有全部通过,每人再加2分,再看是否都通过,如此反复提分,直到所有人都通过为止 。
分析:
第一步,统计没通过的人数 ;
第二步,如果有人没通过,加分;
第三步,循环判断。
declare @q int
while (1=1)
begin
select @q=count(*)from sc where degree<60
if(@q>0)
update sc set degree=degree+2
else
break
end
print '加分后成绩如下:'
select * from sc
问题:
采用美国的ABCDE五级打分制来显示笔试成绩。
A级: 90分以上
B级: 80-89分
C级: 70-79分
D级: 60-69分
E级: 60分以下
print 'ABCDE五级打分制'
select no,成绩=case
实验四 T-SQL编程
1、目的与要求
(1)进一步巩固第2章至第4章所学内容。
(2)掌握用户自定义数据类型。
(3)掌握变量的分类及其使用方法。
(4)掌握各种运算符的使用。
(5)掌握各种控制语句的使用。
(6)掌握系统函数及用户自定义函数的使用。
2、实验准备。
(1)了解T-SQL支持的各种基本数据类型。
(2)了解自定义数据类型使用的一般步骤。
(3)了解T-SQL各种运算符、控制语句的功能及其使用方法。
(4)了解系统函数的调用方法。
(5)了解用户自定义函数使用的一般步骤。
3、实验内容
(1)自定义数据类型的使用。
①对于实验2中给出的数据库结构,再自定义一数据类型ID_type,用户描述员工编号。在“查询分析器”窗口中输入如下程序并执行。
执行上面代码,但是出现这样的错误,不知道是不是之前就存在了。
②在YGGL数据库中创建表Employees3表,表结构与Employees表类似,知识EmployeeID列使用的数据类型为用户自定义数据类型ID_type。 (2)变量的使用。
①对于实验2给出的数据库表结构,创建一个名为female的用户变量,并在SELECT语句中使用该局部变量查找表中所有女员工的编号、姓名。
②定义一个变量,用户获取员工号码为102201的员工的电话号码。
执行完上面语句后可以得到变量phone的值,如上面截图中结果。
【思考与练习】
定义一个变量,用于描述YGGL数据库的Salary表中000001号员工的实际收入,然后查询该变量。
首先declare定义变量RealInCome,然后利用SELECT语句查询EmployeeID=000001的员工的实际收入赋值给RealInCome,最后利用SELECT查询RealInCome变量的值。
(3)运算符的使用。
①使用算数运算符“-”,查询员工的实际收入。 ② 使用比较运算符“>”,查询Employees表中工作时间大于5年的员工信息。
set nocount on 用法
set nocount on 用法
1. 什么是 set nocount on
set nocount on 是 SQL Server 中的一个语句,它用于控制在执行 T-SQL 语句时是否返回或输出行计数消息。当将 set nocount on
设置为 ON 时,SQL Server 不会返回或输出任何行计数消息。
2. 为什么要使用 set nocount on
在执行 T-SQL 语句时,SQL Server 通常会返回每个语句执行后所影响的行数。这些行计数消息可能会增加网络流量,降低性能,并且在执行大量数据操作时会成为不必要的干扰。通过使用 set
nocount on,可以避免返回这些行计数消息,提高执行效率。
3. set nocount on 的使用方法
在使用 set nocount on 时,可以遵循以下几个使用方法:
• 方法 1:直接在 SQL Server Management Studio
(SSMS) 中使用
在 SSMS 中,可以在要执行的 T-SQL 语句之前加上
set nocount on。
例如: set nocount on select * from
tableName • 方法 2:在存储过程中使用
在存储过程中使用 set nocount on 可以避免返回行计数消息。
例如: ``` create procedure sp_example as
begin set nocount on
-- 执行其他 T-SQL 语句
end ```
• 方法 3:在触发器中使用
在触发器中使用 set nocount on 可以避免触发器执行后返回行计数消息。
例如: ``` create trigger tr_example on
tableName for insert as begin set nocount on