一、IF语句
IF语句是SQL SERVER中最常用的流程控制语句之一,它根据指定的条件执行不同的代码块。IF语句的基本格式如下所示:
IF condition
BEGIN
statement1;
statement2;
...
END;
ELSE
BEGIN
statement3;
statement4;
...
END;
1.1 IF语句的条件
IF语句中的条件可以是任何返回TRUE或FALSE的表达式。例如,可以使用比较运算符(<、>、=、<>、<=、>=)、逻辑运算符(AND、OR、NOT)和函数(例如LEN、ISNULL)等构建复杂的条件表达式。
注意:在使用IF语句时,条件表达式必须要用圆括号括起来。
1.2 IF语句的执行
当IF语句的条件为TRUE时,IF语句会执行THEN子句中的所有代码块;当IF语句的条件为FALSE时,会执行ELSE子句中的所有代码块。
下面是一个使用IF语句的示例,其中根据salary
的值来决定bonus
的值:
DECLARE @salary DECIMAL(10,2) = 3000.00;
DECLARE @bonus DECIMAL(10,2);
IF @salary > 4000.00
SET @bonus = 500.00;
ELSE
SET @bonus = 200.00;
SELECT @bonus AS 'Bonus';
说明:在上面的示例中,salary
的值为3000.00,所以会执行ELSE子句中的代码块,设置bonus
的值为200.00。
二、CASE语句
CASE语句是一种类似于IF语句的流程控制语句。它可以根据指定的条件执行不同的代码块。与IF语句不同的是,CASE语句可以根据表达式的不同返回不同的值或执行不同的代码块。CASE语句的基本格式如下所示:
CASE expression
WHEN value1 THEN result1
WHEN value2 THEN result2
....
ELSE default_result
END
2.1 CASE语句的表达式
CASE语句的表达式可以是任何返回值的表达式,例如变量、列名和函数等。
2.2 CASE语句的值
CASE语句的值可以由一个或多个WHEN子句指定。每个WHEN子句包含一个值和一个结果。如果表达式的值与某个WHEN子句中的值相等,则返回该子句中指定的结果。
2.3 CASE语句的默认值
CASE语句的ELSE子句可以指定一个默认结果。如果表达式的值与WHEN子句中的任何值都不相等,则返回ELSE子句中指定的默认结果。
下面是一个使用CASE语句的示例,根据department_id
的不同,返回不同的部门名称:
DECLARE @department_id INT = 4;
DECLARE @department_name VARCHAR(50);
SELECT @department_name =
CASE @department_id
WHEN 1 THEN '人力资源部'
WHEN 2 THEN '财务部'
WHEN 3 THEN '市场部'
ELSE '未知部门'
END;
SELECT @department_name AS 'DepartmentName';
说明:在上面的示例中,department_id
的值为4,因此返回的是ELSE子句中指定的默认结果:未知部门。
三、WHILE语句
WHILE语句是一种循环语句,它可以反复执行一段代码块,直到指定的条件为FALSE为止。WHILE语句的基本格式如下所示:
WHILE condition
BEGIN
statement1;
statement2;
...
END;
3.1 WHILE语句的条件
WHILE语句中的条件是一个可执行表达式,通常这个表达式都会包含一个或多个变量或函数。如果条件为TRUE,则执行循环中的代码块;如果条件为FALSE,则终止循环。
3.2 WHILE语句的执行
WHILE语句的执行逻辑非常简单。首先,检查条件表达式的值。如果这个值为TRUE,则执行代码块中的所有语句;如果这个值为FALSE,则跳过代码块中的所有语句,继续执行后面的代码。
下面是一个使用WHILE语句的示例,打印出1~10之间的所有奇数:
DECLARE @counter INT = 1;
DECLARE @max_value INT = 10;
WHILE @counter <= @max_value
BEGIN
IF @counter % 2 = 1
PRINT @counter;
SET @counter = @counter + 1;
END;
说明:在上面的示例中,WHILE语句会在counter
等于1时开始执行,根据IF语句的判断结果是否输出该值,然后继续执行下一次循环,直到counter
等于10时退出循环。
四、BREAK和CONTINUE语句
BREAK语句和CONTINUE语句是在循环中常用的结束语句。它们使循环的执行更灵活。BREAK语句用于立即终止循环,而CONTINUE语句用于跳过当前的循环并继续执行下一次循环。下面是BREAK和CONTINUE语句的使用示例:
DECLARE @counter INT = 1;
DECLARE @max_value INT = 10;
WHILE @counter <= @max_value
BEGIN
IF @counter % 2 = 0
BEGIN
SET @counter = @counter + 1;
CONTINUE;
END;
IF @counter = 7
BREAK;
PRINT @counter;
SET @counter = @counter + 1;
END;
说明:在上面的示例中,WHILE语句会在counter
等于1时开始执行,根据IF语句的判断结果是否输出该值,如果该值为偶数,则通过CONTINUE语句跳过当前循环,并执行下一次循环;如果该值为奇数但等于7,则通过BREAK语句立即终止循环;否则输出该值,并执行下一次循环,直到counter
等于10时退出循环。
五、总结
本文介绍了SQL SERVER中的流程控制语句,包括IF语句、CASE语句、WHILE语句和BREAK/CONTINUE语句。这些流程控制语句使得在编写复杂的SQL语句时更加灵活和方便。在使用这些语句时,需要注意条件表达式的书写,以及控制语句的执行逻辑。