関数内でストアド プロシージャを実行できないのはなぜですか?
8 に答える
これは、関数の実行によってデータが変更されることは想定されておらず、ストアド プロシージャの実行を許可すると、これが可能になるためだと思われます...
関数内から呼び出すには、ストアド プロシージャを関数に変更する必要があります。
または、1 つの方法はxp_cmdshell
、バッチ ファイルに実行プロシージャ ステートメントが含まれているバッチ ファイルを呼び出すために使用することです。関数では、拡張プロシージャを呼び出すことができます。
例えば。
Create Function...
EXEC master.sys.xp_cmdshell 'C:\test.bat'
RETURN...
これが良い習慣だと言っているわけではありませんが、可能性があると言っているだけです。
関数内でプロシージャを呼び出すことはできますが、select ステートメントを介してその関数を呼び出すことはできません。関数は、別の呼び出しプログラムを介して呼び出すと正常に動作します。dml 操作の場合も同様です。関数には dml 操作を含めることができますが、select ステートメントを介して呼び出すことはできません。 .一方、別のプログラムを介して関数を呼び出すと、dml が実行されます
技術的には、関数からストアド プロシージャを呼び出すことは可能です。ただし、ストアド プロシージャと関数の目的を思い出してください。
関数の目的:関数は値を計算するために使用されるため、値を返す必要があります。関数は、データを変更しない限り、select ステートメントから呼び出すことができます。(一時テーブルではなく、永続的なテーブル データ)
ストアド プロシージャの目的: ストアドプロシージャはビジネス ロジックを実行するために使用されるため、値を返す場合と返さない場合があります。