Transact-SQL 包含控制逻辑流的语句，也包含CASE 表达式，它允许你在一个SELECT 或 UPDATE 语句中，每次对一个单个的行进行一次条件判断。

1、语句级（Statement level）

下面的语句可以使你在脚本语句中控制逻辑流：

l BEGIN⋯END 块，包含在这个语句中的一系列 Transact-SQL 语句，都可以作为一个单元运行。

l IF⋯ELSE 块，使用这个语句时，如果满足条件，SQL Server 将执行IF中的语句，否则，执行ELSE 中的语句。

l WHILE 块,只要满足条件，则 WHILE 下的语句将被重复执行。BREAK 和CONTINUE 能够在 WHILE 循环中控制语句的执行。下面的例子中，演示了根据某顾客是否还有订单的情况，把顾客从顾客列表中相应地删除。

USE northwind

IF EXISTS (SELECT * FROM orders

WHERE customerid = 'fran' )

PRINT '*** Customer cannot be deleted ***'

ELSE BEGIN

DELETE customers WHERE customerid = 'frank'

PRINT '*** Customer deleted ***'

END

GO

2、行级（Row level）

在 CASE 语句中，列出几种可能的值，并逐一进行检测。如果表达式返回值是 true，则CASE 表达式返回 WHEN子句中的值。如果表达式的返回值是 false，并且指定了 ELSE 语句的话，SQL Server 将返回 ELSE 子句中的值。你可以在使用表达式的任意地方使用 CASE 语句。

语法

CASE expression

{WHEN expression THEN result} [，⋯n]

[ELSE result]

END

下例声明了一个局部变量，并且检测它的值是等于4、5 或 6，根据它具体的值，进入WHILE 循环判断当前值是奇数还是偶数。

DECLARE @n tinyint

SET @n = 5

IF (@n BETWEEN 4 and 6)

BEGIN

WHILE (@n > 0)

BEGIN

SELECT @n AS 'Number',

CASE

WHEN (@n%2) = 1

THEN 'ODD'

ELSE 'EVEN'

END AS 'Type'

SET @n = @n - 1

END

END

ELSE

PRINT 'NO ANALYSIS'

GO

注意：在这个例子中的块语句(BEGIN／END)的使用能够改善脚本语句的可读性。