问题描述
我需要针对我的情况的解决方法。我不是专家
我正在寻找允许我选择所有记录的解决方案
如果参数为空,则列。 (见 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)))
)