2

nvarcharパラメータを持つストアドプロシージャがあります。このSPを使用する場合、呼び出し元がsqlコマンドのテキストを提供することを期待しています。

SP内から提供されたSQLコマンドを実行するにはどうすればよいですか?

これも可能ですか?-

EXECを使用して可能だと思いましたが、次のとおりです。

EXEC @script

指定された名前のストアドプロシージャが見つからないことを示すエラー。スクリプトなので、これは明らかに正確ですが、期待どおりに機能していないと思います。

4

4 に答える 4

8

使用する:

BEGIN

  EXEC sp_executesql @nvarchar_parameter

END

...パラメータがSQLクエリ全体であると仮定します。そうでない場合:

DECLARE @SQL NVARCHAR(4000)
SET @SQL = 'SELECT ...' + @nvarchar_parameter

BEGIN

  EXEC sp_executesql @SQL

END

SQL インジェクション攻撃に注意してください。動的 SQL の呪いと祝福を読むことを強くお勧めします。

于 2010-02-18T02:24:37.423 に答える
0

sp内から@sqlStatementを実行するだけです。ただし、SQL インジェクションが可能になるため、最善の方法ではありません。ここで例を見ることができます

于 2010-02-18T02:23:21.513 に答える
0

EXECUTEコマンドを文字列として渡すことを使用します。やみくもに実行している SQL ステートメントが悪意のないものであることを確認するのは難しいため、システムが深刻な脆弱性にさらされる可能性があることに注意してください。

于 2010-02-18T02:24:05.677 に答える
0

提供された sql コマンドを SP 内から実行するにはどうすればよいですか?

非常に慎重に。このコードは、レコードの追加や削除、さらにはテーブルやデータベース全体の追加や削除など、あらゆることを実行できます。

これを安全に行うには、許可された少数のテーブル/ビューに対してのみ dbreader 権限を持つ別のユーザー アカウントを作成し、EXECUTE ASコマンドを使用してコンテキストをそのユーザーに制限する必要があります。

于 2010-02-18T02:25:08.610 に答える