簡體   English   中英

SQL Select all 如果參數為空

[英]SQL Select all if parameter is empty

我需要針對我的情況的解決方法。 我不是專家,我正在尋找一種解決方案,如果參數為空,則允許我 select 列中的所有記錄。 (參見 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 的數據類型是什么......您說“空”,但它可能是一個數值,可能是零或有效數字 - 因此或@@Counter = 0 可能更適用。 此外,您還沒有確切指定您正在使用的數據庫平台,因此您應該能夠根據您的情況調整語法(如有必要)。

或者:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM