当前位置:  开发笔记 > 编程语言 > 正文

SQL"IF","BEGIN","END","END IF"?

如何解决《SQL"IF","BEGIN","END","ENDIF"?》经验,为你挑选了3个好方法。

根本不是SQL人员.请顾问写下以下代码.

首先,它确保只选择了一所小学 - 然后,在BEGIN之后,如果变量@Term等于3,我们想在IF语句下做这些东西.这是问题所在.当@Term不是= 3时,我们仍然想要下拉并执行SECOND INSERT INTO @Classes部分.仅供参考 - 当运行时,Term = 3,但它不同时执行两个INSERT - 如果在"IF @Term = 3"部分的末尾有一个END IF,而不仅仅是一个简单的END?

IF @SchoolCategoryCode = 'Elem' 

--- We now have determined we are processing an elementary school...

BEGIN

---- Only do the following if the variable @Term equals a 3 - if it does not, skip just this first part

    IF @Term = 3

    BEGIN

        INSERT INTO @Classes

        SELECT      
        XXXXXX  
        FROM XXXX blah blah blah

    END   <----(Should this be ENDIF?)

---- **always** "fall thru" to here, no matter what @Term is equal to - always do the following INSERT for all elementary schools

    INSERT INTO @Classes    
    SELECT
    XXXXXXXX    
    FROM XXXXXX (more code) 

END

foxxtrot.. 46

它与SQL语言的Normal Form有关.IF根据定义,语句只能采用 单个 SQL语句.但是,有一种特殊的SQL语句可以包含多个SQL语句,即BEGIN-END块.

如果省略该BEGIN-END块,则SQL将运行正常,但它只会执行第一个语句作为其中的一部分IF.

基本上,这个:

IF @Term = 3
    INSERT INTO @Classes
    SELECT              
        XXXXXX  
    FROM XXXX blah blah blah

BEGIN-END块相同,因为您只执行一个语句.但是,出于同样的原因,IF在C语言的语句中不包括大括号是一个坏主意,因此总是优先使用BEGINEND.



1> foxxtrot..:

它与SQL语言的Normal Form有关.IF根据定义,语句只能采用 单个 SQL语句.但是,有一种特殊的SQL语句可以包含多个SQL语句,即BEGIN-END块.

如果省略该BEGIN-END块,则SQL将运行正常,但它只会执行第一个语句作为其中的一部分IF.

基本上,这个:

IF @Term = 3
    INSERT INTO @Classes
    SELECT              
        XXXXXX  
    FROM XXXX blah blah blah

BEGIN-END块相同,因为您只执行一个语句.但是,出于同样的原因,IF在C语言的语句中不包括大括号是一个坏主意,因此总是优先使用BEGINEND.



2> AnthonyWJone..:

SQL中没有ENDIF.

直接跟随IF的语句仅在if表达式为真时执行.

BEGIN ... END结构与IF分开.它将多个语句绑定在一起作为一个块,可以将它们视为单个语句.因此BEGIN ... END可以在IF之后直接使用,因此BEGIN .... END序列中的整个代码块将被执行或跳过.

在您的情况下,我怀疑FROM XXXXX之后的"(更多代码)"是您的问题所在.



3> SquidScareMe..:

手边代码看起来正确.如果您尝试使用'Else'并看看会发生什么怎么办?

IF @SchoolCategoryCode = 'Elem' 

--- We now have determined we are processing an elementary school...

BEGIN

---- Only do the following if the variable @Term equals a 3 - if it does not, skip just this first part

    IF @Term = 3
    BEGIN
        INSERT INTO @Classes

        SELECT              
            XXXXXX  
        FROM XXXX blah blah blah

        INSERT INTO @Classes    
        SELECT
        XXXXXXXX    
        FROM XXXXXX (more code) 
    END   <----(Should this be ENDIF?)
    ELSE
    BEGIN


        INSERT INTO @Classes    
        SELECT
        XXXXXXXX    
        FROM XXXXXX (more code) 
    END
END

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有