Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 向WHERE子句添加开关_Sql - Fatal编程技术网

Sql 向WHERE子句添加开关

Sql 向WHERE子句添加开关,sql,Sql,我一直试图在下面的脚本中添加一个开关。 如果@IgnoreExclutions=1,那么我不想排除Controltb\u AssocAccounts\u ExcludedShurnameDob或Controltb\u AssocAccounts\u ExcludedDOB中的任何值 我已经包括了我的一个尝试,但我认为这不是很可读,而且我不确定它是否可靠,因为NULL可能是排除列表中的一个值 DECLARE @IgnoreExclusions TINYINT = 1; SELECT ua.Us

我一直试图在下面的脚本中添加一个开关。 如果@IgnoreExclutions=1,那么我不想排除Controltb\u AssocAccounts\u ExcludedShurnameDob或Controltb\u AssocAccounts\u ExcludedDOB中的任何值

我已经包括了我的一个尝试,但我认为这不是很可读,而且我不确定它是否可靠,因为NULL可能是排除列表中的一个值

DECLARE @IgnoreExclusions TINYINT = 1;

SELECT  ua.UserAccountKey,          
FROM    #Accounts x 
        INNER JOIN WH.dbo.vw_DimUserAccount ua      
         ON 
         ( --surname and DOB need to match
         x.Surname = ua.Surname AND 
         x.DOB = ua.DOB
         ) 
         AND  
         x.UserAccountKey <> ua.UserAccountKey
WHERE   EXISTS  
          (
          SELECT x.Surname, x.DOB
          EXCEPT
          SELECT ExcludedSurname,ExcludedDOB 
          FROM   WH.dbo.Controltb_AssocAccounts_ExcludedSurnameDOB
          )
        AND
        EXISTS
          (
          SELECT x.DOB
              --SELECT CASE WHEN @IgnoreExclusions = 1 THEN NULL ELSE x.DOB END --<<<<ATTEMPT
          EXCEPT 
          SELECT ExcludedDOB 
          FROM   WH.dbo.Controltb_AssocAccounts_ExcludedDOB
        )   
GROUP BY    ua.UserAccountKey;

我不确定您使用的是哪种SQL变体,但一个简单的OR子句就不能做到这一点吗

DECLARE @IgnoreExclusions TINYINT = 1;

SELECT  ua.UserAccountKey,          
FROM    #Accounts x 
    INNER JOIN WH.dbo.vw_DimUserAccount ua      
        ON x.Surname = ua.Surname
            AND x.DOB = ua.DOB
            AND x.UserAccountKey <> ua.UserAccountKey
WHERE EXISTS  
    (
        SELECT x.Surname, x.DOB
        EXCEPT
        SELECT ExcludedSurname,ExcludedDOB 
        FROM   WH.dbo.Controltb_AssocAccounts_ExcludedSurnameDOB
    )
    AND 
    (
        @IgnoreExclusions = 1 OR EXISTS
        (
              SELECT x.DOB
              EXCEPT 
              SELECT ExcludedDOB 
              FROM   WH.dbo.Controltb_AssocAccounts_ExcludedDOB
        )
    )
GROUP BY ua.UserAccountKey;