在sql server中,如何在不同条件下在case语句中插入multiple-else?

在sql server中,如何在不同条件下在case语句中插入multiple-else?,sql,sql-server,sql-update,case,Sql,Sql Server,Sql Update,Case,我真的很难在不同的条件下在case语句中插入else…我不确定是语法错误还是什么?它不起作用,我没有任何错误消息,问题是在某些情况下我的别名中仍然有Null UPDATE Table SET Alias = SUBSTRING(Names, 10, 40); UPDATE Table SET Alias = CASE WHEN Alias LIKE 'core.user%' OR Alias LIKE 'core.idea%' OR Ali

我真的很难在不同的条件下在case语句中插入else…我不确定是语法错误还是什么?它不起作用,我没有任何错误消息,问题是在某些情况下我的别名中仍然有Null

    UPDATE Table
    SET Alias = SUBSTRING(Names, 10, 40);

    UPDATE Table
            SET Alias = CASE WHEN  Alias LIKE 'core.user%'  OR Alias LIKE  'core.idea%' OR Alias LIKE'core.form%' 
                             THEN STUFF(Alias, CHARINDEX('.', Alias) + 5, 0, '-') 
                             WHEN  Alias LIKE 'core.badge%'  OR Alias LIKE  'core.award%' OR Alias LIKE 'core.field%' OR Alias LIKE 'core.audit%' OR Alias LIKE 'core.event%'
                             THEN STUFF(Alias, CHARINDEX('.', Alias) + 6, 0, '-')
                             ELSE CASE len(Alias) when charindex('.',Alias) +4 then Alias
                                  ELSE CASE len(Alias)when charindex('.',Alias)+ 5 then Alias
                                        END
                                   END
                         END;

     /*the result for this part is:*/
     Names                                 Alias
     idealink.core.userbadge               core.user-badge
     idealink.core.ideacategories          core.idea-categories
     idealink.core.awardtype               core.award-type        /*till here it's working,but when*/
     idealink.core.user                    NULL        ---I'd like to have (core.user)----
     idealink.core.idea                    NULL        ---I'd like to have (core.idea)----
     idealink.core.award                   NULL        ---I'd like to have (core.award)---- 

     /*I think the problem is here, I'm having Null*/
所有这一切的目的都是为了摆脱idealink,当字符串在核心后面太长时,在单词之间加一个破折号;但在某些情况下,字符串不是很长,所以我不需要破折号(core.user、core.idea、core.award)等等,只要去掉idealink就可以了

我真的很感谢你们的帮助。
感谢

原因是core.user和core.userbridge都属于您为别名定义的标准,如“core.user%”

要显式设置core.user、core.idea、core.award的值,请执行以下操作

检查/***************/

UPDATE Table
    SET Alias = SUBSTRING(Names, 10, 40);

UPDATE Table
   SET Alias = CASE /*****************************************************************************************/
                    WHEN Alias in('core.user','core.idea','core.award')
                    THEN Alias                  
                    /*****************************************************************************************/
                    WHEN Alias LIKE 'core.user%'  OR Alias LIKE  'core.idea%' OR Alias LIKE'core.form%' 
                    THEN STUFF(Alias, CHARINDEX('.', Alias) + 5, 0, '-') 
                    WHEN  Alias LIKE 'core.badge%'  OR Alias LIKE  'core.award%' OR Alias LIKE 'core.field%' OR Alias LIKE 'core.audit%' OR Alias LIKE 'core.event%'
                    THEN STUFF(Alias, CHARINDEX('.', Alias) + 6, 0, '-')
                    ELSE CASE len(Alias) when charindex('.',Alias) +4 then Alias
                         ELSE CASE len(Alias) when charindex('.',Alias)+ 5 then Alias
                               END
                         END
                END;

CASE
不能有多个
ELSE
子句
ELSE
用于当no
解析为true时。哼,你知道我怎么解决这个问题吗?(我是新手)…:(这些不是多个
ELSE
子句,@Larnu。它们是嵌套的。主
案例的
ELSE
是一个嵌入的
案例
。(可以说很差)问题中的格式只是让它看起来在语法上是无效的。是的,OP更像是建议他们在一个
案例中需要多个其他的
,@EricBrandt.OMG,你完全正确@George Joseph,我明白了!非常感谢!!:)