SQL嵌套大小写-快捷方式逻辑?

SQL嵌套大小写-快捷方式逻辑?,sql,logic,case,shortcut,Sql,Logic,Case,Shortcut,我正试图摆脱所有的动态SQL代码。这个存储过程似乎需要一些带有WHERE子句的嵌套CASE语句。这是预期的工作。然而,我担心的表现。嵌套的GuarantorNumber是否不在select中。。。如果父案例语句不正确,是否执行语句 WHERE 1 = CASE WHEN ( @method='ADDED_RECORDS' ) THEN CASE WHEN ( pt.[GuarantorNumber] not in (select cpg.GuarantorNumbe

我正试图摆脱所有的动态SQL代码。这个存储过程似乎需要一些带有WHERE子句的嵌套CASE语句。这是预期的工作。然而,我担心的表现。嵌套的GuarantorNumber是否不在select中。。。如果父案例语句不正确,是否执行语句

WHERE 1 = CASE WHEN ( @method='ADDED_RECORDS' ) THEN
      CASE WHEN 
        ( pt.[GuarantorNumber] not in (select cpg.GuarantorNumber from [CorepointProtectedGuarantor] cpg) ) THEN
          1
          ELSE 0 END -- NEW_RECORDS

       WHEN ( @method='DELETED_RECORDS' ) THEN
      CASE WHEN 
        ( pt.[GuarantorNumber] not in (select mpg.GuarantorNumber from [MeditechProtectedGuarantor] mpg) ) THEN
          1
          ELSE 0 END -- DELETED_RECORDS

       WHEN ( @method='UPDATED_RECORDS' ) THEN
      CASE WHEN 
        ( pt.[GuarantorNumber] in 
            (SELECT mpg.GuarantorNumber FROM 
                  [MeditechProtectedGuarantor] mpg, 
                  [CorepointProtectedGuarantor] cpg 
            WHERE 
                  mpg.GuarantorNumber = cpg.GuarantorNumber and
                  (mpg.[LastName] <> cpg.[LastName] OR 
                        mpg.[FirstName] <> cpg.[FirstName] OR 
                        mpg.[MiddleName] <> cpg.[MiddleName] OR 
                        mpg.[Address] <> cpg.[Address] OR 
                        mpg.[AddressLine2] <> cpg.[AddressLine2] OR 
                        mpg.[City] <> cpg.[City] OR 
                        mpg.[State] <> cpg.[State] OR 
                        mpg.[ZIP] <> cpg.[ZIP] OR 
                        mpg.[Phone] <> cpg.[Phone])

            ) -- end of SELECT clause
            ) -- end of WHEN clause 
            THEN
          1
          ELSE 0 END -- UPDATED_RECORDS

搜索的大小写表达式:

返回计算结果为TRUE的第一个输入表达式的结果表达式。
在您的情况下,如果@method='ADDED_RECORDS'和@method='DELETED_RECORDS'为false,则将执行下一条语句WHEN@method='UPDATED_RECORDS'在SQLServer2008中,通过按Cntl+L来分析此行为。

您使用的是什么数据库系统?
Declare @query nvarchar(max) 

Declare @selectoneCount int

Declare @Temp int

SET @Temp =1

Declare @val nvarchar(max)

SET @val =''

select 
       @query = case @Temp

       when 1 

       then       
          case @val

          when 'NULL'

          then
            ('Select Diameter from BallsProbes where Remark =2') 

          else
            ('Select Diameter from BallsProbes where Remark =3')   
            END 
       when 2 
       then ('Select Diameter from BallsProbes where Remark =6')
       end

EXEC(@query)