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