nvarcharパラメータを持つストアドプロシージャがあります。このSPを使用する場合、呼び出し元がsqlコマンドのテキストを提供することを期待しています。
SP内から提供されたSQLコマンドを実行するにはどうすればよいですか?
これも可能ですか?-
EXECを使用して可能だと思いましたが、次のとおりです。
EXEC @script
指定された名前のストアドプロシージャが見つからないことを示すエラー。スクリプトなので、これは明らかに正確ですが、期待どおりに機能していないと思います。
nvarcharパラメータを持つストアドプロシージャがあります。このSPを使用する場合、呼び出し元がsqlコマンドのテキストを提供することを期待しています。
SP内から提供されたSQLコマンドを実行するにはどうすればよいですか?
これも可能ですか?-
EXECを使用して可能だと思いましたが、次のとおりです。
EXEC @script
指定された名前のストアドプロシージャが見つからないことを示すエラー。スクリプトなので、これは明らかに正確ですが、期待どおりに機能していないと思います。
使用する:
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 の呪いと祝福を読むことを強くお勧めします。
sp内から@sqlStatementを実行するだけです。ただし、SQL インジェクションが可能になるため、最善の方法ではありません。ここで例を見ることができます
EXECUTEコマンドを文字列として渡すことを使用します。やみくもに実行している SQL ステートメントが悪意のないものであることを確認するのは難しいため、システムが深刻な脆弱性にさらされる可能性があることに注意してください。
提供された sql コマンドを SP 内から実行するにはどうすればよいですか?
非常に慎重に。このコードは、レコードの追加や削除、さらにはテーブルやデータベース全体の追加や削除など、あらゆることを実行できます。
これを安全に行うには、許可された少数のテーブル/ビューに対してのみ dbreader 権限を持つ別のユーザー アカウントを作成し、EXECUTE ASコマンドを使用してコンテキストをそのユーザーに制限する必要があります。