如果参数为空,则 SQL 全选

问题描述

我需要针对我的情况的解决方法。我不是专家 我正在寻找允许我选择所有记录的解决方案 如果参数为空,则列。 (见 where 子句部分)。
空参数在 Tempdb 中,我无法创建存储过程。

SELECT

DB_NAME(),ST.ID,ST.DESC,SP.DESC,TF.STARTDATE,TF.TERMDate

FROM STANDA ST      --1st DB  -can't create procedures
LEFT JOIN TABLEFEE TF ON TF.TABLEFEE = ST.ID    --1st DB  -can't create procedures
LEFT JOIN SPECIAL SP ON SP.SPECIALC = TF.SPECIALC               --1st DB  -can't create procedures


-- EACH FILTER SHOULD SELECT ALL IF ParaMETER IS EMPTY IN THE BELOW SELECT STATEMENT ENCLOSED WITH 
((SELECT...))
WHERE ST.DESC IN 
((SELECT ME_Desc FROM ##ME_DATA WHERE ME_ID = @@Counter))   --##ME_DATA  2nd DB (temp)
AND SP.DESC IN 
((SELECT ME_Special FROM ##ME_DATA WHERE ME_ID = @@Counter))
AND  TF.STARTDATE IN
((SELECT ME_STARTDate FROM ##ME_Data WHERE ME_ID = @@Counter))
AND TF.TERMDATE IN
((SELECT ME_TERMDate FROM ##ME_Data WHERE ME_ID = @@Counter))

解决方法

你可以这样做

(SELECT ME_Desc FROM ##ME_DATA WHERE ME_ID = @@Counter OR @@Counter IS NULL)

尽管您在何处使用“IS NULL”可能取决于@@Counter 的数据类型究竟是什么……您说“空”,但它可能是一个数字值,可能为零或有效数字- 因此 OR @@Counter = 0 可能更适用。此外,您还没有明确指定您使用的是哪个数据库平台,因此如有必要,您应该能够根据您的情况调整语法。

或者:

WHERE (
  @@Counter IS NULL
  OR
  (ST.DESC IN 
      ((SELECT ME_Desc FROM ##ME_DATA WHERE ME_ID = @@Counter)))
)