ストアドプロシージャ

SQL Server における関数とストアドプロシージャの作成

Meghan Kwartler

IT Consultant

ストアドプロシージャとは?

概要

次を行うルーチン:

  • 入力パラメータを受け取る
  • 処理を実行(EXECUTESELECTINSERTUPDATEDELETE、他の SP 文)
  • ステータスを返す(成功/失敗)
  • 出力パラメータを返す
SQL Server における関数とストアドプロシージャの作成

ストアドプロシージャを使う理由

理由

  • 実行時間を短縮
  • ネットワークトラフィックを削減
  • モジュール化プログラミングを可能に
  • セキュリティ向上
SQL Server における関数とストアドプロシージャの作成

違いは?

UDF

  • 値の返却は必須
    • テーブル値可
  • SELECT 内での実行可
  • 出力パラメータなし
  • INSERTUPDATEDELETE 不可
  • SP の実行不可
  • 例外処理なし

SP

  • 戻り値は任意
    • テーブル値は不可
  • 実行のために SELECT に埋め込めない
  • 出力パラメータとステータスを返す
  • INSERTUPDATEDELETE
  • 関数・SP を実行可
  • TRY...CATCH で例外処理
SQL Server における関数とストアドプロシージャの作成

OUTPUT パラメータ付き CREATE PROCEDURE

-- 最初の 4 行
-- SP 名は一意であること 
CREATE PROCEDURE dbo.cuspGetRideHrsOneDay 
    @DateParm date,
    @RideHrsOut numeric OUTPUT
AS
.......
SQL Server における関数とストアドプロシージャの作成

OUTPUT パラメータ付き CREATE PROCEDURE

CREATE PROCEDURE dbo.cuspGetRideHrsOneDay
    @DateParm date,
    @RideHrsOut numeric OUTPUT
AS
SET NOCOUNT ON
BEGIN
SELECT 
  @RideHrsOut = SUM(
    DATEDIFF(second, PickupDate, DropoffDate)
  )/ 3600
FROM YellowTripData
WHERE CONVERT(date, PickupDate) = @DateParm
RETURN
END;
SQL Server における関数とストアドプロシージャの作成

出力パラメータ vs. 戻り値

出力パラメータ

  • 任意のデータ型
  • 1 つの SP で複数定義可
  • テーブル値パラメータは不可

戻り値

  • 成否を示すために使用
  • 整数型のみ
  • 0 は成功、非 0 は失敗
SQL Server における関数とストアドプロシージャの作成

CREATE PROCEDURE の準備完了!

SQL Server における関数とストアドプロシージャの作成

Preparing Video For Download...