在存储过程中演示使用case的例子(一)

  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)
 
输出结果为 : 没有对应的记录

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值