我有我的查詢問題:SQL服務器:問題與查詢
SELECT Firma, Czas, Dzien, Opis, Kto, ID
FROM Rok2016
WHERE (Dzien BETWEEN @z1 AND @z2)
AND (Firma = @x)
AND (Kto = @y)
我已經修改它,當我在@x
參數放*
,它應該是@z1
之間顯示的所有記錄數據@z2
日期
感謝
我有我的查詢問題:SQL服務器:問題與查詢
SELECT Firma, Czas, Dzien, Opis, Kto, ID
FROM Rok2016
WHERE (Dzien BETWEEN @z1 AND @z2)
AND (Firma = @x)
AND (Kto = @y)
我已經修改它,當我在@x
參數放*
,它應該是@z1
之間顯示的所有記錄數據@z2
日期
感謝
希望這是你想要的。
SELECT Firma, Czas, Dzien, Opis, Kto, ID
FROM Rok2016
WHERE (Dzien BETWEEN @z1 AND @z2)
AND ((@x='*' AND Firma!='')OR(@x!='*' AND [email protected]))
AND (Kto = @y)
這就是它!謝謝 –
修改根據您的查詢
SELECT
Firma, Czas, Dzien, Opis, Kto, ID
FROM
Rok2016
WHERE
((Dzien BETWEEN @z1 AND @z2) AND (Firma = @x) AND (Kto = @y) AND (@x != '*'))
OR
((Dzien BETWEEN @z1 AND @z2) AND (Firma = @x) AND (@x = '*'))
如果@x
不等於*
它會運行原始查詢。
否則,如果你把*
在@x
,它顯示的數據@z1
和@z2
日期之間的所有記錄,不檢查Kto = @y
雖然你可以修改此查詢到有類似... (((Firma = @x) AND (Kto = @y)) OR @x = '*')
這種做法可能會導致與得到的問題爲您的查詢優化查詢計劃。有關更多詳細信息,請參閱 http://use-the-index-luke.com/sql/where-clause/obfuscation/smart-logic
我建議寫兩個不同的查詢,一個用於(Firma = @x) AND (Kto = @y)
而另一個對Firma
或Kto
沒有過濾器,然後讓你的應用程序選擇哪種查詢的基礎上@x
值執行。
你是說你想要'Firma = @ x'謂詞是可選的嗎? – mendosi
...不看'@ y'? – ydoow