我想根據變量是否是數字來過濾SELECT語句。我想要的行爲是,如果該參數@ProductID不是一個號碼,然後我想在WHERE子句執行以下操作:根據變量是否是數字來過濾WHERE
WHERE (DTH.TaskId IS NULL OR PDT.PK_Product LIKE @productId)
如果@ProductID是一個數字我想以下WHERE子句:
WHERE (PDT.PK_Product = @productId)
我想下面將工作:
WHERE (ISNUMERIC(@productId) = 0 AND DTH.TaskId IS NULL
OR PDT.PK_Product LIKE @productId)
AND (ISNUMERIC(@productId) = 1 AND PDT.PK_Product = @productId)
,因爲如果ISNUMERIC(@ProductID)的計算結果爲0,它不會使用聲明的第二部分,如果1第一。
編輯:
我的問題是,如果ProductID等於數字(和ISNUMERIC(@ProductID)計算結果爲1)我仍然得到結果,其中DTH.TaskId IS NULL。
「不工作,但是」是什麼意思? –
我在上面添加了一個響應。感謝您幫助我澄清。 –
如果您的SELECT使用聚合函數,那麼這可能很重要:在存在聚合函數的情況下,CASE不能可靠地提供短路評估。請參閱[CASE/COALESCE不總是按照文本順序 ](https://connect.microsoft.com/SQLServer/feedback/details/690017/case-coalesce-wont-always-evaluate-in-textual-order)進行評估和[聚合不遵循CASE ](https://connect.microsoft.com/SQLServer/feedback/details/691535/aggregates-dont-follow-the-semantics-of-case)的語義。 – HABO