オンザフライでビューを作成したい (SQL Server 2005) データベースがあります。私のコードでは、CREATE VIEW ステートメントを作成していますが、それを機能させる唯一の方法は、クエリ文字列全体を作成してそのまま実行することです。パラメータを使用したいのですが、これは:
SqlCommand cmd = new SqlCommand("CREATE VIEW @name AS SELECT @body");
cmd.Parameters.AddWithValue("@name", "foo");
cmd.Parameters.AddWithValue("@body", "* from bar");
「キーワードVIEWの近く」(おそらく「@name」)にエラーがあることを教えてくれます-言うまでもなく"CREATE VIEW foo AS SELECT * FROM bar"
、チャンピオンのように機能します。
これは不可能ですか?そうでない場合、CREATE ステートメントを実行する前に入力をクリーンアップするより良い方法はありますか? 場合によっては、クエリの本文にユーザー入力が含まれている可能性があり、「これを単一の select ステートメントの本文として扱う」と言うことができる方法があれば、より安全だと思います。多分私が求めているのはあまりにも奇妙ですか?
FOLLOWUP 04 Nov: OK、はい、私が望むのは SQL インジェクションのようなものですが、このコマンドを実行してテーブルなどを削除するオプションを少なくとも最小限に抑えたいと思います (完全に削除しない場合)。 . 確かに、これを実行しているユーザーには、そもそもテーブルを削除する権限がありませんが、おわかりいただけたと思います。事実上、
"This statement will not alter any existing data in any way{ ... }"
.
現在コード化されている方法は、 friolの回答のように文字列連結を行うことですが、それはサニタイズをまったく行いません。少なくとも、次のような疑わしい文字をスクラブできれば気分が良くなります。または-またはあなたは何を持っていますか。私は、私のためにスクラブを行うためのライブラリ関数、またはそれらの線に沿った何かがあることを望んでいました.