1. 演示case的存储过程
/*
当前的存储过程演示了如何在存储过程中使用case 语句.
CASE
有两种格式:
1.
简单CASE 函数将某个表达式与一组简单表达式进行比较以确定结果
CASE input_expression
WHEN when_expression THEN result_expression
[ ...n ]
ELSE
else_result_expression
END
2. CASE
搜索函数计算一组布尔表达式以确定结果。
CASE
WHEN Boolean_expression THEN result_expression
[ ...n ]
ELSE
else_result_expression
END
两种格式均支持可选的ELSE 参数。
说明:
input_expression
使用简单CASE 格式时所计算的表达式。input_expression 参数可以是Microsoft SQL Server 2005 Mobile Edition (SQL Server Mobile) 中的任何有效表达式。
WHEN when_expression
使用简单CASE 格式时与input_expression 相比较的简单表达式。when_expression 参数可以是任何有效的SQL Server 表达式。input_expression 和每个when_expression 的数据类型必须相同,或者必须进行隐式转换。
n
占位符,表示可以使用多个WHEN when_expression THEN result_expression 子句或多个WHEN Boolean_expression THEN result_expression 子句。
THEN result_expression
当input_expression 等于when_expression 的计算结果为TRUE 或者Boolean_expression 的计算结果为TRUE 时,所返回的表达式。result expression 参数可以是任何有效的SQL Server 表达式。
ELSE else_result_expression
比较运算结果都不为TRUE 时所返回的表达式。如果省略此参数并且比较运算的计算结果都不为TRUE,CASE 将返回NULL。else_result_expression 参数可以是任何有效的SQL Server 表达式。else_result_expression 和任意result_expression 的数据类型必须相同,或者必须进行隐式转换。
WHEN Boolean_expression
使用CASE 搜索格式时所计算的布尔表达式。Boolean_expression 可以是任何有效的布尔表达式。
*/
ALTER PROCEDURE
dbo.tt
@id int,
@strout nvarchar(100) output
AS
declare @tmp int
/*
如果age的值为null,则表示没有对应的记录*/
select @tmp = case when age is null then -1 else age end from Students where id = @id
SELECT @strout =
case
when @tmp = -1 then '
没有对应的记录'
when (@tmp > 0 and @tmp < 10) then '
大于0,小于10岁'
when (@tmp > 10 and @tmp < 20) then '
大于10,小于20岁'
when (@tmp > 20 and @tmp < 30) then '
大于20,小于30岁'
else
'
大于等于30岁'
end
RETURN
2. 测试表Students中的数据
ID
|
NAME
|
AGE
|
SEX
|
1
|
小明
|
21
|
1
|
2
|
小芳
|
24
|
2
|
3
|
|
20
|
2
|
3. 在查询分析器中测试
1.
declare
@out nvarchar(100)
exec
tt @id = 1, @strout = @out output
print
(
@out)
输出结果为
:
大于20
,
小于30岁
2.
declare
@out nvarchar(100)
exec
tt @id = 4, @strout = @out output
print
(
@out)
输出结果为
:
没有对应的记录