関数とSQL Serverのストアドプロシージャ



7 Answers

SPとUDFの違いは次のとおりです。

+---------------------------------+----------------------------------------+
| Stored Procedure (SP)           | Function (UDF - User Defined           |
|                                 | Function)                              |
+---------------------------------+----------------------------------------+
| SP can return zero , single or  | Function must return a single value    |
| multiple values.                | (which may be a scalar or a table).    |
+---------------------------------+----------------------------------------+
| We can use transaction in SP.   | We can't use transaction in UDF.       |
+---------------------------------+----------------------------------------+
| SP can have input/output        | Only input parameter.                  |
| parameter.                      |                                        |
+---------------------------------+----------------------------------------+
| We can call function from SP.   | We can't call SP from function.        |
+---------------------------------+----------------------------------------+
| We can't use SP in SELECT/      | We can use UDF in SELECT/ WHERE/       |
| WHERE/ HAVING statement.        | HAVING statement.                      |
+---------------------------------+----------------------------------------+
| We can use exception handling   | We can't use Try-Catch block in UDF.   |
| using Try-Catch block in SP.    |                                        |
+---------------------------------+----------------------------------------+
Question

私はかなり長い間関数とストアドプロシージャを学習してきましたが、なぜ、いつ、私は関数やストアドプロシージャを使うべきか分かりません。 彼らは私と同じように見える、多分私はそれについてちょっと初心者です。

何人かが私に理由を教えてくれますか?




SQL Serverでは、関数とストアドプロシージャは2種類のエンティティです。

機能: SQL Serverデータベースでは、関数がいくつかのアクションを実行するために使用され、アクションはすぐに結果を返します。 関数には2つのタイプがあります。

  1. システム定義

  2. ユーザー定義の

ストアドプロシージャ: SQL Serverでは、ストアドプロシージャはサーバーに格納され、ゼロ、単一および複数の値を返すことができます。 ストアドプロシージャには2つのタイプがあります。

  1. システムストアドプロシージャ
  2. ユーザー定義プロシージャ



次の点が役に立つかもしれないものをいつ使うべきかを決めるために、

  1. ストアドプロシージャは、関数がそれを行うことができるテーブル変数を返すことはできません。

  2. ストアドプロシージャを使用すると、関数を使用することができない場合にサーバー環境パラメータを変更できます。

乾杯




  • プロシージャではできないselect文では、関数を使用できます。

  • ストアドプロシージャは入力パラメータと出力パラメータの両方を使用しますが、関数は入力パラメータのみをとります。

  • 関数は、text、ntext、image&timestampsの型の値を、プロシージャと同じように返すことはできません。

  • 関数はcreate tableのユーザー定義データ型として使用できますが、プロシージャでは使用できません。

***例:-create table <tablename>(name varchar(10),salary getsal(name))

ここでgetsalは給与タイプを返すユーザ定義関数で、テーブルが作成されても給与タイプには記憶容量は割り当てられていません。また、getsal関数も実行されませんが、このテーブルからいくつかの値を取得すると、戻り値の型が結果セットとして返されます。




ストアドプロシージャ はスクリプトとして使用されます。 彼らはあなたのために一連のコマンドを実行し、それらは特定の時間に実行するようにスケジュールすることができます。

関数 はメソッドとして使用されます。 あなたは何かを渡し、結果を返します。 小さくて速いものでなければならない。




ユーザー定義関数は、SQL Serverプログラマーが利用できる重要なツールです。 あなたはSQL文でそれをインラインで使うことができます

SELECT a, lookupValue(b), c FROM customers 

lookupValueはUDFになります。 ストアドプロシージャを使用する場合、この種の機能は使用できません。 同時に、あなたはUDFの内部で特定のことを行うことはできません。 ここで覚えておくべき基本的なことは、UDFのことです。

  • 恒久的な変更を作成できません
  • データを変更することはできません

ストアドプロシージャはこれらのことを行うことができます。

私にとって、UDFのインライン使用は、UDFの最も重要な使用法です。




単一の値を返す関数から始めます。 便利なことは、頻繁に使用されるコードを関数に入れて、結果セットの列として返すことができることです。

次に、パラメータ化された都市のリストに関数を使用することができます。 dbo.GetCitiesIn( "NY")これは、結合として使用できるテーブルを返します。

これはコードを整理する方法です。 何かが再利用可能であることを知り、それが時間の無駄であるときは、試行錯誤や経験を通して得られたものだけです。

また、関数はSQL Serverの良いアイデアです。 彼らはより速く、非常に強力なことができます。 インラインおよびダイレクト選択。 過度に使用しないように注意してください。




他のSQL文で使用する値を計算して返すときは、ユーザ定義関数を記述します。 SQLステートメントの複雑なセットをグループ化することが必要な場合には、ストアード・プロシージャーを作成してください。 結局のところ、これは2つのかなり異なるユースケースです!




Related