2017-02-23 19 views
0

の問題私は私のクエリに問題があります。SQL Serverの:クエリ

SELECT Firma, Czas, Dzien, Opis, Kto, ID 
FROM Rok2016 
WHERE (Dzien BETWEEN @z1 AND @z2) 
    AND (Firma = @x) 
    AND (Kto = @y) 

を私は@xパラメータで*を入れたときにそれを変更する必要があり、@z1との間のすべてのレコードのデータを表示するようになっています@z2日付

おかげ

+0

あなたは 'Firma = @ x'述部をオプションにしたいと言っていますか? – mendosi

+0

... '@ y'を見ることなく? – ydoow

答えて

0

希望、これはあなたが望むものです。

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) 
+0

これはそれです!ありがとうございました –

0

@xが、それはあなたの元のクエリを実行します*と等しくない

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*を置けば、それはあなたがアプローチを取得して問題を引き起こす可能性があり... (((Firma = @x) AND (Kto = @y)) OR @x = '*')のようなものを持っているために、このクエリを変更できますがKto = @y

0

を確認せず、@z1@z2日付の間のすべてのレコードにデータを示していますクエリの最適なクエリプラン。詳細については、 http://use-the-index-luke.com/sql/where-clause/obfuscation/smart-logic

を参照してください私は2つの異なるクエリ、(Firma = @x) AND (Kto = @y)用とFirmaまたはKtoにはフィルタを持っていないと、あなたのアプリケーションが@xの値に基づいて実行するためにどのクエリを選択していた別のものを書くことをお勧めします。