我正在創建一個報告工具,用戶可以在其中選擇運算符和2個值進行篩選。T-SQL:使用動態比較運算符的篩選器(=,<=, > =,...)
我的基本表:
UserID UserName
-------------------------------
1 User1
2 User2
3 User3
4 User4
5 User5
用戶可以選擇,我想翻譯這樣操作:
Option SQL Operator
------------------------------
between column between x and y
like column '%' + x + '%'
greater than column > x
less than column < x
equal to column = x
not equal to column <> x
我想類似的東西:
... column = ISNULL(@parameter, column)
從某種意義上說,如果你傳遞了一些東西或什麼都沒有,它仍然會正確地查詢。
下面是我用打TSQL(**不起作用*):
declare @bwValue1 varchar(200) = '2', --between value 1
@bwValue2 varchar(200) = '4'; --between value 2
select * from users where
(UserID BETWEEN @bwValue1 AND @bwValue2
OR UserID != @bwValue1
OR UserID = @bwValue1
OR UserID < @bwValue1
OR UserID > @bwValue1
OR UserID LIKE '%' + @bwValue1 + '%');
有沒有寫一個TSQL能夠正確評估語句無論選擇哪個運營商的方式?
*最終答案*
這裏是我結束了對任何人是好奇:
declare @fn varchar(200) = 'carl',
@Op varchar(3) = 'bw',
@bwValue1 varchar(200) = '978',
@bwValue2 varchar(200) = '2000'
select * from users where userfirstname like '%' + @fn + '%'
AND ((@Op = 'eq' AND (userid = @bwValue1))
OR (@Op = 'neq' AND (userid <> @bwValue1))
OR (@Op = 'lt' AND (userid < @bwValue1))
OR (@Op = 'gt' AND (userid > @bwValue1))
OR (@Op = 'li' AND (userid like '%' + @bwValue1 + '%'))
OR (@Op = 'bw' AND (userid between @bwValue1 and @bwValue2)))
根據指定參數構建動態SQL。 –
是的,我試圖避免這樣做。要求說我應該使用「參數化SQL」,以便sql可以緩存sp以供將來使用,執行計劃等。 – Losbear
我不認爲有這麼多不同的參數,SQL可以創建一個正常穩定的計劃,場景。 –