違いSQLのUDFとストアド・プロシージャの違い

Anonim

UDFとストアドプロシージャがあります。

SQL環境には、手元にあるタスクを正常に実行するためにさまざまなコンポーネントが用意されています。ユーザー定義関数とストアド・プロシージャはSQL環境内で共通です。これらの2つの違いは以下のとおりです。

相違点

ユーザー定義関数で見られる最初の違いは、値を返さなければならない方法でプログラムされていることです。ストアドプロシージャには、値を返すかどうかにある程度の余裕があります。これは、ストアドプロシージャに返す値があるかどうかによって異なります。

<! - 1 - >

ユーザー定義関数とストアドプロシージャの間に見られる別の違いは、ステートメントです。ユーザー定義関数では、DML文が許可されていないときにのみ、select文を読み取ることができます。一方、ストアド・プロシージャでは、select文とDML文の両方を使用できます.DML文も更新および操作できます。

ユーザー定義関数はパラメーターの入力のみを許可しますが、同じパラメーターの出力はサポートしません。これに対して、ストアドプロシージャは、入力パラメータと出力パラメータの両方をサポートします。 UDFでは、try-catchブロックの使用も許可されていません。ストアドプロシージャを使用すると、try catchブロックを使用して例外処理を行うことができます。

<! - 2 - >

UDFでは、関数内でトランザクションが発生することも許可されていません。この機能は、トランザクション処理を可能にするストアドプロシージャで使用できます。 UDFでは、表変数の使用も許可されておらず、一時表も使用できません。ただし、ストアドプロシージャでは、テーブル変数とその中のテンポラリテーブルを使用できます。

関数内では、UDFはストアド・テーブルの呼び出しを許可しません。これは、ストアドプロシージャに関しては全く異なります。これにより、関数を何の制限もなく呼び出すことができます。関数の場合、UDFはselect文から上記の関数を呼び出すことを許可しません。ストアドプロシージャでは、Where / SelectおよびHavingステートメントからプロシージャを呼び出すこともできません。ただし、ExecまたはExecuteを使用して、ストアドプロシージャを呼び出したり実行したりすることもできます。最後に、UDFを使用して結合節を作成し、結果セットを利用することができます。ストアドプロシージャでは、ジョイン句にプロシージャを使用できないため、これは不可能です。また、ストアドプロシージャではゼロまたはnの値に戻すことができますが、UDFは事前に設定された特定のプリセット値にのみ戻ることができることに注意することも重要です。

<! - 9 - >

概要

関数がストアドプロシージャではない値を返すことが必須です。

選択文はUDFでのみ受け入れられ、DML文は必要ありません。

ストアド・プロシージャは、DML文と同様に文も受け入れます。

UDFは入力のみを許可し、出力は許可しません。

ストアドプロシージャは、入力と出力の両方を可能にする。

キャッチブロックはUDFでは使用できませんが、ストアード・プロシージャーで使用できます。

UDFの機能ではトランザクションは許可されていませんが、ストアード・プロシージャーでは許可されています。

UDFではテーブル変数のみが使用でき、一時テーブルは使用できません。

ストアドプロシージャは、テーブル変数とテンポラリテーブルの両方を許可します。

UDFは、ストアード・プロシージャーが関数から呼び出されるのを許可しません。

UDFは結合節で使用されますが、ストアド・プロシージャは結合節で使用できません。

ストアドプロシージャは常にゼロへの戻りを許可します。逆に、UDFは、所定のポイントに戻らなければならない値を有する。