我有一個存儲過程,以根據傳入過濾器類型和過濾器值過濾表的結果。SQL更改WHERE列和值取決於傳入變量
目前這是一個非常大的if/else語句:
IF @FilterBy = 'CustomerName'
SELECT X, Y, Z
FROM @Table
WHERE CustomerName = @FilterValue
ORDER BY CustomerID
ELSE IF @FilterBy = 'OrderID'
SELECT X, Y, Z
FROM @Table
WHERE OrderID = CAST(@FilterValue AS SMALLINT)
ORDER BY CustomerID
我有5個否則,如果和我總是從同一個表中選擇相同的列。有沒有辦法使用像WHERE子句的CASE或switch語句來清理代碼?
標籤您正在使用的數據庫管理系統。該代碼是特定於產品的。 – jarlh
使用AND/OR代替這種if(或case)結構通常會更好。 – jarlh
動態SQL可能是最好的方法。這將強制查詢被重新編譯,這將確保最佳的執行計劃,而不管WHERE條款如何。 –