代码之家  ›  专栏  ›  技术社区  ›  user3496218

案例语句SQL Server的执行顺序

  •  0
  • user3496218  · 技术社区  · 7 年前

    是否执行 CASE 包含多个部分的语句是 INSERT 语句按顺序执行,即使在下一行之后,缺少更好的单词的“规则”是否仍保持不变?在下面的查询中,PO_类型赋值是否会否决下一个命令,例如查找文章列表?那么,即使那篇文章在声明第二部分的列表中,如果它是05或07类型,它仍然会分配给安德鲁?

    谢谢

    /*INSERT values into the table using SELECT making sure to exclude vendor 20800 - (see last line of code)*/
    
    INSERT INTO SCM_PO_EMPLOYEE_NAME (PO_NUMBER, PO_ITEM_NUMBER, MATERIAL, BUSINESS_UNIT_CODE,PO_TYPE,TEAM_MEMBER_NAME)
    
                                      SELECT I.PO_NUMBER, 
                                             I.PO_ITEM_NUMBER, 
                                             I.MATERIAL,
                                             B.BU_CODE, 
                                             H.PO_TYPE,
                                             CASE WHEN H.PO_TYPE IN ('05','07') -- Promo PO type - should be on both po type and stock category
                                                  AND  I.STOCK_CATEGORY LIKE ('A60383%') -- stock category is second part of the check
                                                  THEN 'AZ'
                                                  WHEN H.PO_TYPE = '02' -- ma PO type
                                                  THEN 'MB'
                                                  WHEN I.MATERIAL IN ( SELECT ARTICLE
                                                                       FROM   ADI_USER_MAINTAINED.dbo.SCM_EMPLOYEE_ARTICLE A ) -- Check the Employee to article table next
                                                  THEN A.TEAM_MEMBER_NAME -- If the PO number matches that conditions then assign the employee from the employee article table
                                                  WHEN M.BUSINESS_UNIT_CODE = B.BU_CODE -- if not use then go to the BU assignment (below)
                                                  THEN B.TEAM_MEMBER_NAME  --- Use the team member name from the Employee_BU table
                                             END  AS   [TEAM_MEMBER_NAME]
    
                                      FROM   PDX_SAP_USER.dbo.VW_PO_HEADER H
                                      JOIN   PDX_SAP_USER.dbo.VW_PO_ITEM I ON H.PO_NUMBER = I.PO_NUMBER 
                                      JOIN   PDX_SAP_USER.dbo.VW_MM_MATERIAL M ON I.MATERIAL = M.MATERIAL 
                                      JOIN   ADI_USER_MAINTAINED.dbo.SCM_EMPLOYEE_ARTICLE A ON I.MATERIAL = A.ARTICLE
                                      JOIN   ADI_USER_MAINTAINED.dbo.SCM_EMPLOYEE_BU B ON B.BU_CODE = M.BUSINESS_UNIT_CODE
    
    
                                      WHERE H.VENDOR_NO <> '20800'; --Exclude '20800' as a vendor!!
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Gordon Linoff    7 年前

    A. case 按顺序进行评估。

    那么,第二个 then 仅当第一个 然后 不返回true。作为一个极端的例子,请考虑:

    select (case when 1=1 then 'true'
                 when 1/0 = 0 then 'error'
            end)
    

    此返回 'true' 而不是出错。