-5

アプリケーションに検索フィールドがあり、SQL を使用しています。

私のアプリケーションにはComboBox、ユーザーが検索したいものを選択できるようにする 3 つの個別の es があります。

たとえば、検索フィールドに と があり、 を持つ人Nameまたはを持つ人を選択したいとします。family nameageage 20age 20 and named "john" or other states

では、これらすべての状態をサポートするにはIFELSE、 、の一般的な手順を使用する必要がありますか?WHERE

4

5 に答える 5

1

変数@Age@Name、および@FamilyName

SELECT *
FROM tbl
WHERE
    (@Age IS NULL OR Age == @Age)
    AND (@Name IS NULL OR Name LIKE '%' + @Name + '%')
    AND (@FamilyName IS NULL OR FamilyName LIKE '%' + @FamilyName+ '%')

if を行う必要はありません。しかし、SQL 内で IF を実行したい場合は、CASE WHEN <true state> THEN <true action> ELSE <false action> END

于 2013-03-15T09:47:38.677 に答える
0

データベースでSQLをどのように実行しますか? データベース内のストアド プロシージャですか、それとも SQL ステートメントをデータベースに送信するだけですか。

2 番目の場合は、C# コードで if-then-else を実行し、別の SQL ステートメントをデータベースに送信します。

于 2013-03-15T09:51:55.110 に答える
0

SQL の If-Else の構文は次のとおりです。

IF yourconditon
BEGIN
  //sql query
END
ELSE
  BEGIN
     //sqlquery
   End
于 2013-03-15T09:47:27.293 に答える
0

いくつかの異なるオプションがあり、(いつものように) 両方のパフォーマンス テストをお勧めします。

  1. 動的 SQL。

使用されるパラメーターに基づいて SQL を動的に構築します。

declare sqlTxt VARCHAR(max)
delcare params VARCHAR(128)

params = 'Age INT, Name VARCHAR(128), FamilyName VARCHAR(128)'
sqlText = 'SELECT field Name From Table WHERE 1=1'

IF (IS NOT NULL) sqlText += 'AND Age == @Age '
IF (IS NOT NULL) sqlText += 'AND Name LIKE %@Name%'
IF (IS NOT NULL) sqlText += 'AND FamilyName LIKE %FamilyName%'

EXEC sp_executesql @sqlText, @params, @Age = @Age, @Name = @Name, @FamilyName = @FamilyName
  1. SQL でのハンドル

Eli Gassert によって投稿されたソリューションを使用してください。

通常、小規模なクエリではオプション 2 を使用しても問題ありませんが、検索を拡張して多くの異なるパラメーターを含める場合は、速度が低下する可能性がある「パラメーター スニッフィング」に注意してください。

パフォーマンスが問題になる場合は、基本的に両方の方法をテストします。

于 2013-03-15T09:54:15.673 に答える
-1

ユーザーが選択した内容に基づいて、Windows プロジェクトで SQL を作成する必要があります。

StringBuilder mySQL = new StringBuilder();

if(Name != "")
  mySQL.Append("Name like '%" + Name + "'%");

if(mySQL != "" && (familyName != "" || age != ""))
  mySQL.Append(" AND");

if(familyName != "")
  mySQL.Append(" familyName like '%" + familyName + "%');

そして、残りの条件を続けます。stringbuilder 文字列を SELECT クエリに追加します。

string finalSQL = "SELECT * FROM MyTable WHERE " + mySQL.toString();
于 2013-03-15T09:51:55.513 に答える