web-dev-qa-db-ja.com

ストアドプロシージャで関数を使用する場合

ストアドプロシージャに比べて、関数にはどのような利点/状況がありますか?機能の使用を正当化したい。ストアドプロシージャは、トランザクションの処理、入力、複数の値、insert into ... execなど、あらゆる点でメリットがあるようです。それでは、spではなく関数を適用する理想的な状況はいつですか?これは意見に基づく質問や推奨事項ではありません。また、常にspsを使用するように要求するのではなく、関数の利点を確認したいだけです。

er ST

5番は関数の利点だと思いますが、sprocsにはこれを回避する方法がたくさんあります。

2
user172334

クイック検索から私は以下を見つけました 記事

uDFとSPの利点について:

プロシージャではSELECTとDML(INSERT/UPDATE/DELETE)ステートメントを使用できますが、関数ではSELECTステートメントのみを使用できます。

これを使用して、クエリの使用を、関数を介してのみ選択ステートメントに制限できます。

プロシージャはSELECTステートメントで使用できませんが、関数はSELECTステートメントに埋め込むことができます。

ストアドプロシージャはSQLステートメントでWHERE/HAVING/SELECTセクションのどこにも使用できませんが、関数は使用できます。

返された行ごとにudfを実行するため、これはクエリの負荷に影響を与える可能性があります。

テーブルを返す関数は、別の行セットとして扱うことができます。これは、他のテーブルとのJOINで使用できます。

インライン関数は、パラメーターを取り、JOINやその他の行セット操作で使用できるビューと考えることができます。

私の意見では、それは実際には関連するユースケースの問題です。行ごとのデータを操作する必要がある場合、またはDMLクエリを実行する権限を持つユーザーに対してDMLクエリが実行されないように安全にしたい場合は、関数を使用できます。

1
Arik Gortsunian