2016-11-01 6 views
0

T-SQLにこののC#にコードを書くの効率的な方法はありますか?私がやったし、それが作業のようなものは何TSQL:WHERE句でCASEを使用しますか?

string sqlText = "SELECT col1, col2, col3 " 
       + "FROM table " 
       + "WHERE col1 = @val1 "; 

if(condition) // i.e. if type == 'salary' 
{ 
    sqlText += " AND col2 = @val2"; 
} 

sqlText += " ORDER BY col1"; 

はちょうどif/being/endで文全体をWAPすることです。

IF(@empType = 'salary') 
    BEGIN 
    //query statement here... 
    END 
ELSE 
    BEGIN 
    //same query statement here with the extra logic that C# code adds... 
    END 

このクエリは、HTMLページにデータを表示するために使用されました。さて、ページをSSRSレポートに変換することに決めました。助けるため

おかげ

+0

データベース内のempTypeはどこですか? – StingyJack

+0

私はこれがあなたが意味するものだと思います:'のcol1 = @ val1 からcol1、col2、col3を選択し、(@empType == 'salary'とcol2 = @valw)(@empTypeがnullである) orderby col1 ' –

+0

なぜ論理でそれを扱うのはなぜですか? 'どこCOL1 = @ val1と(@empType <> '給与' OR COL2 = @ val2の)' – juharr

答えて

3

何か

SELECT col1, col2, col3 
FROM table 
WHERE col1 = @val1 
    AND (@empType <> 'salary' 
    OR (@empType = 'salary' AND col2 = @val2)) 
ORDER BY col1 

のような私はempTypeが、その場合のparamまたは何か他のものが何であるかわかりません。動的SQLを構築

はいくつかの理由(SQLサーバ、潜在的なSQLインジェクションへのより多くの露出によって確実に最適化されカント)のために悪いですが、上記のような競争条件のパターンが働くだろう。

は、別個の格納されprocsのを考慮して、代わりに混乱のこの種のコードを介して、正しいを呼び出します。

+0

なぜあなたはそこに '1 = 1'を持っていますか?また、 '@ empType'が" salary "でない場合はtrueでなければなりません。 – juharr

+0

@empTypeはパラメータです。 C#コードで、Where句にロジックを追加することを確認しています – Richard77

+0

@juharr - プレースホルダを削除するのを忘れていました。 – StingyJack

関連する問題