4

私は、誰かが以前に見たことがあると確信している問題に取り組んでいますが、ネット上で見つけたのは、それをしない方法だけでした。

偽のテーブルの例と動的検索。(評価が低いので画像を投稿できません。恥ずかしいと思います!!)

追加ボタンをクリックすると、基準の選択肢を追加するための別の行が自動的に作成されます。

(注:私のテーブルは間違いなくもっと複雑です)

さて、私の問題ですが、このタスクの SQL を処理する方法を知っていると思っていましたが、実際には知りません。私がすべきことの唯一の例は、この種の動的テーブルクエリを意図したものではありません。例には、ユーザーが望むほど多くの検索フィルターを作成する機能がありませんでした (または、私の理解が不足していた可能性があります)。

アップロードした画像の品質が十分でない場合、または十分な情報を提供していない場合はお知らせください。

この状況のベストプラクティスについて本当に興味があります。前もって感謝します。

4

4 に答える 4

1

同様の質問がありました。実際に select ステートメントを文字列として作成して渡す sp_executesqlストアド プロシージャで動的 SQL を使用できます。

または、where 句にすべての条件が含まれているが NULL 値が無視される、私が作成したストアド プロシージャのようなストアド プロシージャを作成できる場合もあります。

私のシナリオで思いついたストアド プロシージャは次のとおり です。未確定の数のパラメーターを使用するときに動的 SQL を回避するにはどうすればよいですか?

私が作成したパラメーター化されたストアド プロシージャの利点は、動的 SQL に関連する SQL インジェクションのリスクを回避できることです。

于 2010-05-06T21:43:42.910 に答える
0

動的 SQL のユーティリティであるSqlBuilderを確認してください。

于 2010-05-06T21:35:42.133 に答える
0

元の投稿: 複数の条件で検索するための SQL を作成する

select * from thetable
where (@name='' or [name]=@name) and (@age=0 or age=@age)

ただし、上記のクエリはテーブル スキャンを強制します。パフォーマンスを向上させ、より複雑なシナリオを実現するには (元の投稿で質問を単純化したと思います)、動的 SQL の使用を検討してください。ところで、Linq to SQL を使用すると、次のように動的 SQL を非常に簡単に構築できます。

IQueryable<Person> persons = db.Persons;
if (!string.IsNullOrEmpty(name)) persons = persons.Where(p=>p.Name==name);
if (age != 0) persons = persons.Where(p=>p.Age=age);
于 2010-05-06T21:36:15.780 に答える
0

2 つの主な選択肢:

Linq to Sql を使用すると、クエリを作成し、追加し、再度追加することができます。結果を反復処理するまで、SQL ステートメントを実際にコンパイルして実行することはありません。

または、動的 SQL を使用できます。これを簡単にする秘訣は「WHERE (1=1)」テクニックですが、(SQL インジェクション攻撃を避けるために) パラメーターを慎重に使用し、慎重に SQL ステートメントを作成する必要があります。

于 2010-05-06T21:31:10.257 に答える