LoginSignup
1
0

More than 3 years have passed since last update.

T-SQL ユーザー定義関数、エラー処理 他

Last updated at Posted at 2019-09-14

T-SQL

変数

DECLARE @変数名 型名
SET @変数名 = 代入値

または

SELECT @変数名 = 代入値

DECLARE 
   @変数名1 型名
   @変数名2 型名
SELECT
   @変数名1 = 代入値
,          @変数名2 = 代入値

テーブル変数

・実行時のみメモリ上に存在する仮想テーブル
・通常の変数同様に処理完了時に自動的に廃棄されるため、データの削除処理やテーブル自体の削除処理は不要
・大量のデータを挿入するとその分メモリを消費するが、高速に処理できる

DECLARE @変数名 table {
  列名1 型名 オプション
, 列名2 型名 オプション
}

主キーの設定

DECLARE @変数名 table
  列名1 型名 オプション
, 列名2 型名 オプション
, PRIMARY KEY
, 主キー
  )

INSERT INTO @変数名 VALUES ( 値1, 値2, 値3)
INSERT INTO @変数名 VALUES ( 値1, 値2, 値3)

UPDATE @変数名
SET カラム名 = 代入値
FROM @変数名
WHERE(条件)

一時テーブル

・変数ではなく本物のテーブルが一時的に作られる
・セッションが有効な間は削除されない(エディタを閉じるまで有効)
・処理は低速だが大量のデータを一時的に扱う場合は効果的

CREATE TABLE #テーブル名 {
列名1 型名 オプショ
, 列名2 型名 オプション
}

エラー処理
・TRYの部分に実行したい処理を書く
→ もしその中でエラーがあったらCATCHに移動
CATCHにはエラーが起きた場合の処理を書く

BEGIN TRY
  処理
END TRY
BEGIN CATCH
 エラー処理
END CATCH

TRANSACTION ✖️ TRY CATCH の組み合わせ

BEGIN  TRY
    BEGIN TRANSACTION
  -- 処理
    COMMIT TRANSACTION
END TRY
BEGIN  CATCH
  ROLLBACK TRANSACTION
 -- エラー処理
END  CATCH
#ユーザー定義関数 
CREATE  FUNCTION  関数名
  @引数1 データ型
,   @引数2 データ型

RETURNS 戻り値 データ型
AS
BEGIN
  処理
  RETURN 戻り値
END
GO

以下、お店の商品ごとに割引するという処理
idと金額を入れたら割引後の値段を出してくれるfnc_calc_discountという関数を作ります。
例:id1番は10%引きです。

テーブル作成などの処理は省略します。

CREATE FUNCTION [dbo].[fnc_calc_discount](
  @p_id int
, @p_price money
)
RETURNS money
AS
BEGIN
DECLARE
   @w_money money
 , @w_discount_rate money

SELECT
 @w_discount_rate = campaign_discount.discount
FROM campaign_discount
WHERE(campaign_discount = ISNULL(@p_id, ''))

SELECT @w_money = ISNULL(@p_price, 0) * (1 - ISNULL(@w_discount_rate, 0))

RETURN @money

--実行

SELECT dbo.fnc_discount_rate(1, 500)  450
SELECT dbo.fnc_discount_rate(2, 500)  400
SELECT dbo.fnc_discount_rate(3, 500)  350
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0