ように私は、SQLサーバーで動的なクエリを使用している:私は@conditionは、任意の値を持っているかどうか、私の結果を得ることができたsp_executesqlを
このことによりdeclare @sql nvarchar (1000),@condition nvarchar(100)='';
set @sql=N'select * from tablename where (0=0)'[email protected]+'';
exec(@sql)
。 しかし、私はsp_executesql
がクエリプランの再利用を促進するので、exec
が良いことを知りました。
だから、私は、sp_executesqlを `と私のクエリを試してみました
set @sql =N'select * from dbo.testclient where (0=0) @condition'
exec sp_executesql @sql,N'@condition nvarchar(100)',@condition
しかし
Incorrect syntax near '@condition'.
私の問題は、私は上記のクエリは、sp_executesql
どこで動作するように作ることができる方法であるとして、それはエラーで失敗しましたパラメータ@conditionは条件または空白( '')となり、何が間違っているのでしょうか。
動的SQLは危険です。おそらく、あなたはそれなしであなたが望むものを手に入れる方法を見つけようとするべきでしょう。 –
これはまだSQLインジェクション攻撃に対するオープンな扉です。ユーザが 'column = 'value';ドロップテーブルtablename; - 'の状態に入ると、どうなるでしょうか? –
@ZoharPeled最初にこの問題を指摘してくれてありがとうございました。私たちは実際にクエリのパラメータを作成しています。次に、同じ結果を得るために複数の条件を書くことを避けたかったのです。 – vikscool