在本教程中,将学习SQL Server IF...ELSE
语句来控制程序的流程。
IF...ELSE
语句是一个控制流语句,用于根据指定的条件执行或跳过语句块。
IF语句
以下是IF
语句的语法:
IF boolean_expression
BEGIN
{ statement_block }
END
在此语法中,如果Boolean_expression
的计算结果为TRUE
,则执行BEGIN...END
块中的statement_block
。 否则,将跳过statement_block
,并将程序的控制权传递给END
关键字之后的语句。
请注意,如果布尔表达式包含SELECT
语句,则必须将SELECT
语句括在括号中。
以下示例首先从示例数据库中的sales.order_items
表中获取销售额。 然后,如果销售额大于100
万,它将打印出一条消息。
BEGIN
DECLARE @sales INT;
SELECT
@sales = SUM(list_price * quantity)
FROM
sales.order_items i
INNER JOIN sales.orders o ON o.order_id = i.order_id
WHERE
YEAR(order_date) = 2018;
SELECT @sales;
IF @sales > 1000000
BEGIN
PRINT 'Great! The sales amount in 2018 is greater than 1,000,000';
END
END
执行上面代码块,得到以下输出结果:
Great! The sales amount in 2018 is greater than 1,000,000
IF ELSE声明
当IF
子句中的条件求值为FALSE
时,并且想要执行另一个语句块时,可以使用ELSE
子句。
以下说明IF ELSE语句:
IF Boolean_expression
BEGIN
-- 当布尔表达式为TRUE时,将执行此语句块
END
ELSE
BEGIN
-- 当布尔表达式为FALSE时,将执行此语句块
END
每个IF
语句都有一个条件。 如果条件的计算结果为TRUE
,则执行IF
子句中的语句块。 如果条件为FALSE
,则执行ELSE
子句中的代码块。
请参阅以下示例:
BEGIN
DECLARE @sales INT;
SELECT
@sales = SUM(list_price * quantity)
FROM
sales.order_items i
INNER JOIN sales.orders o ON o.order_id = i.order_id
WHERE
YEAR(order_date) = 2017;
SELECT @sales;
IF @sales > 10000000
BEGIN
PRINT 'Great! The sales amount in 2018 is greater than 10,000,000';
END
ELSE
BEGIN
PRINT 'Sales amount in 2017 did not reach 10,000,000';
END
END
在此示例中,获取2017
年的销售额。在IF
子句中检查销售额是否大于1000
万。 由于销售额小于该值,因此ELSE
子句中的语句块将执行。
以下显示输出:
Sales amount did not reach 10,000,000
嵌套IF…ELSE语句
可以在一个IF...ELSE
语句中嵌套另一个IF...ELSE
语句。 请参阅以下示例:
BEGIN
DECLARE @x INT = 10,
@y INT = 20;
IF (@x > 0)
BEGIN
IF (@x < @y)
PRINT 'x > 0 and x < y';
ELSE
PRINT 'x > 0 and x >= y';
END
END
不将IF
语句嵌套在另一个IF
语句中是一个好习惯,因为它会使代码难以阅读并且难以维护。
在本教程中,学习了如何使用SQL Server IF...ELSE
语句来控制代码执行流程。