1. ホーム
  2. sql

[解決済み] ストアドプロシージャとビューの違いは何ですか?

2022-02-07 22:21:57

質問

いくつかの点で混乱しています。

  1. ストアドプロシージャとビューの違いは何ですか?

  2. SQL Server では、どのような場合にストアドプロシージャを使用し、どのような場合にビューを使用すればよいのでしょうか。

  3. ビューでは、パラメータを渡すことができる動的なクエリを作成することができますか?

  4. また、どのような基準でどちらが速いのでしょうか?

  5. ビューとストアドプロシージャは、永久にメモリを割り当てるのでしょうか?

  6. ビューは仮想テーブルを作成し、プロシージャはマテリアルテーブルを作成するというのはどういう意味ですか?

他にもポイントがあれば教えてください。

解決方法は?

ビューは 仮想 テーブルを使用します。 複数のテーブルをビューで結合し、ビューを使用して、あたかも1つのテーブルからデータが来ているかのように表示することができます。

ストアドプロシージャは、データの更新や挿入、単一の値やデータセットの返送など、パラメータを使用して機能を実行します。

ビューとストアドプロシージャを作成する - には、それぞれをどのような場合に、どのような理由で使用するのかについてのマイクロソフトの情報があります。

2つのテーブルがあるとします。

  • tbl_user , 列を持つ。 user_id , user_name , user_pw
  • tbl_profile , 列を持つ。 profile_id , user_id , profile_description

もし、これらのテーブルから頻繁にクエリーを実行するのであれば、すべてのSQLを結合するのではなく、次のようなビューを定義することになるでしょう。

CREATE VIEW vw_user_profile
AS
  SELECT A.user_id, B.profile_description
  FROM tbl_user A LEFT JOIN tbl_profile B ON A.user_id = b.user_id
GO

したがって、もし私がクエリ profile_description によって user_id をすればよいのです。

SELECT profile_description FROM vw_user_profile WHERE user_id = @ID

そのコードは、次のようなストアドプロシージャで使用することができます。

CREATE PROCEDURE dbo.getDesc
    @ID int
AS
BEGIN
    SELECT profile_description FROM vw_user_profile WHERE user_id = @ID
END
GO

だから、後で、電話すればいいんです。

dbo.getDesc 25

に対する記述を取得し user_id 25、ここで 25 はパラメータです。

もちろん、もっと細かい部分もありますが、これはあくまで基本的な考え方です。