sql中有“分支语句”吗?比如 switch 对几种并行的情况分别处理?
--------------------------------------------------------
在帮助中没有找到 “分支语句”,难道只能用 多层 if 语句进行嵌套吗?假如变量 @a 有4个值,1,2,3,4,要根据不同的值分别处理
比如下面的代码,太难看了吧!if (@a=1)
begin
   mmmmmmmm
   mmnnnnnnnn
end
else
begin
   if (@a=2)
   begin
       uuuuuuuuuuu
       ioioioioi
   end
   else
   begin
      if (@a=3)
      begin
         3333333333333
         333333333
      end
      else
      begin
         if (@a=4)
          begin
             4444444444444
             444444444
          end
      end
   end
end

解决方案 »

  1.   

    谢谢,case when 主要用在对字段复制吧?
    能代替分支语句用吗?
      

  2.   

    也不用else啊,直接
    if (@a=1)
    begin
       mmmmmmmm
       mmnnnnnnnn
    end
    if (@a=2)
    begin
       mmmmmmmm
       mmnnnnnnnn
    end
    直观点
      

  3.   


    if (@a=1)
    begin
     select '1'
    end
    else if (@a=2)
    begin
    select '2'
    end
    else if (@a=3)
    begin
    select '3'
    end
    else if (@a=4)
    begin
    select '4'
    end
    为什么不这样写
      

  4.   

    谢谢,看来真是没有可以替代的语句呀,只能用 if else 呀。另外,谢谢 lxpbs8851,
    我的代码确实有问题,if语句,不应该放在begin end块中。
      

  5.   

    case when 怎么不是了?
      

  6.   

    IF 
     BEGIN
     END
    ELSE IF
     BEGIN
     END
    ELSE IF
     BEGIN
     END
    ELSE
     BEGIN
    END
      

  7.   

    谢谢。
    我的意思是,case when 只能用在 select 语句中呀。
    我想在程序中处理分支,处理复杂的逻辑。
    用 case 不方便呀,case 只能配合着 select 语句用呀。
      

  8.   

    case when then 
    用这个的话简单了很多 ~ 
    怎么不是了呢 
      

  9.   

    declare @i intset @i=1case @i
    when 1 then print '1'
    when 2 then print '2'
    when 3 then print '3'
    else print 'other'
    end
      

  10.   

    可是,根据不同的值,打印不同的内容,用 case 能实现吗?不可能吧。
    12楼地代码,就像实现这个简单的功能,但是 case 实现不了呀。
      

  11.   

    declare @i int
    declare @j varchar(10)set @i=1select @j=
    case @i
    when 1 then '1'
    when 2 then '2'
    when 3 then '3'
    else 'other'
    end
    print @j
      

  12.   

    呵呵,在case语句中,不能实现打印吧。
    说到底,case语句,只能实现通过不同的分支,得到一个值,别的做不了。
    比如根据不同的分支,执行不同的操作,case是不能实现的(包括简单的打印都实现不了)。上面的代码,也是得到一个值@i,然后再 case 语句外在打印呀。
      

  13.   

    declare @a int
    select 
    case @a when 1 then '1'
        when 2 then '2'
    when 3 then '3'
    when 4 then '4'
    end
      

  14.   

    晕,还没懂?case when 就是分支语句啊!
      

  15.   


    declare @i int
    set @i = 2print case @i when 1 then 1 when 2 then 2 else 99 end
      

  16.   

    晕了,是你没明白我的意思。
    case when 只能实现分支赋值呀。在每个分支,除了赋值,别的什么也做不了呀。
    case when 是分支语句不错,但不是真正意义上的分支,比如 javascript 中的 switch 语句,在每个分支可以进行任何操作。case when 只是用在 select 中的分支呀。不知你明白没有???
      

  17.   

    case when 只是用在 select 中的分支????
      

  18.   

    我真的不是明白,你是说SQL没switch 语句吧?
    你看看19楼写的,是select ?
      

  19.   

    晕晕晕,你还是没有理解呀。
    print 与 select 一样,就是输出值(数字,或者字符串)
    我的本质含义是说,case when 的分支中,只能进行赋值操作,不能进行别的操作。
    比如我要在一个分支中执行 update ,insert ,用case when 行吗?
      

  20.   

    if语句中,每个分支都可以实现insert,update,select
    但是 case 语句的每个分支只能进行 赋值 操作。
    别咬文嚼字,探讨实际的问题。所以我说,case 语句不是真正的“分支语句”
    我不知,xuam 先生是真的不明白,还是我的表达能力太差了。
      

  21.   

    有if不就可以了嘛,编程语言中的switch用if else都能替代的吧
      

  22.   

    case when 只能实现赋值或是运算表达式, 并不能控制流程。sqlserver中实现switch的功能, 只有两种办法.
    1. if else
    2. goto + label 不推荐。
      

  23.   

    存储过程里面加陷阱,还是需要goto滴,虽然不推荐