asp.netを使用してWebサイトを開発しています。
SQL を使用するインターフェイスのチェックボックスによって駆動されるいくつかのフィルター メカニズムに基づいて、テーブルをクエリする必要がある状況があります。そのため、フィルターにはいくつかの組み合わせがある場合があります。最後に、動的SQLクエリを使用することでこれを実現できることがわかりました。そこで、ストアド プロシージャを作成し、適切なクエリを生成した後、アプリからストアド プロシージャにクエリを渡しました。
私のサンプルストアドプロシージャは次のようになります
CREATE PROCEDURE usp_dynamic(IN query_one VARCHAR(500))
BEGIN
SET @s = CONCAT('SELECT col1,col2 FROM test_table where',query_one );
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
そこでいくつか質問があります
1) これは安全ですか? つまり、SQL インジェクションにつながるのでしょうか?
2) ストアド プロシージャは常に最適なクエリ プランにコンパイルされます。動的クエリは、クエリが正しく行われるたびに SP を再コンパイルしますか?
3) パフォーマンスの問題はありますか?
4) このアプローチを使用する際に注意する必要があるその他の事実はありますか?
5)何か問題がある場合、それらを最小限に抑えるためにどのような行動を取ることができますか?