sql >> データベース >  >> RDS >> Sqlserver

動的SQLパラメータの処理方法

    特定の実装に応じて、この問題に対する2つの一般的なアプローチがあります。

    1)空のパラメーターをスキップして、SQLクエリのフィルターステートメントをコードで動的に作成します。これは、ユーザーが1つの列に複数の値を選択できるようにする場合(つまり、50の状態から0以上を選択してデータをフィルタリングする場合)に最適なアプローチです。

    例:

    txtCondition1とtxtCondition2がテキストボックスであると仮定します:

            // Assuming conn is an open SqlConnection
    
            System.Text.StringBuilder sbSQL = new StringBuilder(500);
    
            List<SqlParameter> cParameters = new List<SqlParameter>();
    
            // Add a default condition of 1=1 so that all subsequent conditions can be added 
            // with AND instead of having to check to see whether or not any other conditions
            // were added before adding AND.
            sbSQL.Append("SELECT * FROM MyTestTable WHERE 1 = 1 ");
    
            if (!String.IsNullOrEmpty(txtCondition1.Text)) {
                sbSQL.Append(" AND Column1 = @Column1");
                cParameters.Add(new SqlParameter("@Column1", txtCondition1.Text));
            }
            if (!String.IsNullOrEmpty(txtCondition1.Text))
            {
                sbSQL.Append(" AND Column2 = @Column2");
                cParameters.Add(new SqlParameter("@Column2", txtCondition2.Text));
            }
    
            SqlCommand oCommand = new SqlCommand(sbSQL.ToString, conn);
            if (cParameters.Count != 0) 
            {
                oCommand.Parameters.AddRange(cParameters.ToArray());
            } 
    
            // Do something with oCommand
    

    2)値がより制約されている場合は、通常、ストアドプロシージャに渡します。ストアドプロシージャは、パラメータの「空」(null、空の文字列、数値の場合は0)をテストして、値を評価するかどうかを決定します。 、など。



    1. MySQL-正確な関連性のある検索結果を取得する方法

    2. SQL標準UPSERT呼び出し

    3. php / mysqlは行を足し合わせて、合計を取得します

    4. 列をNULLからNOTNULLに変更する方法