T-SQL全然わからないので文法調べた

概要

急遽T-SQLを書くことになったので簡単に文法をまとめないとまずいと思った。

参考資料

SQL Server Transact-SQLプログラミング 実践開発ガイド Kindle版
文法の他にそのまま使えそうな例文も書いてあっていい本。

更新履歴

2021/04/21 カーソル、WHILEに関する説明を追加

コードとか

宣言とか代入とか表示

-- 変数の定義
DECLARE @hoge INT;

-- 変数への代入
SET @hoge = 1000;

-- sampleテーブルに対するselect結果を代入したい場合
SELECT @fuga = name from [sample]
WHERE [sample_id] = 1;

-- 結果を表示する
PRINT @hoge;
PRINT @fuga;

IF文

条件内容はイメージで適当に

IF 1=1
  BEGIN
    -- 条件が真の場合の式
  END
ELSE IF 2=2
  BEGIN
    -- 条件が偽の場合の式
  END
ELSE
  BEGIN
    -- 条件が偽の場合の式
  END

カーソルとWHILE文

カーソルとWHILE文を使うとforeachみたいなイメージでSQLの結果を扱える。

-- CUR_hogeIDにselect文で取得したHOGE_IDのリストを入れる
DECLARE CUR_hogeID CURSOR FOR
  SELECT
    HOGE_ID
  FROM
    -- HOGE_IDが取得できるSQLなど

-- カーソルオープン
OPEN CUR_hogeID;

  -- カーソルの最初の1行目を取得して@hogeID(変数)へ値をセット
  FETCH NEXT FROM CUR_hogeID
  INTO @hogeID;

  -- ループ処理スタート、@@FETCH_STATUS = 0と書いておくと、CUR_hogeIDを最後まで回してくれる
  WHILE @@FETCH_STATUS = 0
    BEGIN
      -- T-SQLでやりたい処理を書く
    END

-- ループが終わったらカーソルを閉じる(開放する)こと(閉じないと別のT-SQLで同じ名前のカーソルが宣言されているとエラーになったりして面倒なことになる)
CLOSE CUR_hogeID;
DEALLOCATE CUR_hogeID;

例外処理

BEGIN TRY
  -- クエリ郡
BEGIN CATCH
  SELECT
      ERROR_LINE() AS [ErrorLine], 
      ERROR_MESSAGE() AS [ErrorMessage],
      ERROR_NUMBER() AS [ErrorNumber],
      ERROR_PROCEDURE() AS [ErrorProcedure],
      ERROR_SEVERITY() AS [ErrorSeverity],
      ERROR_STATE() AS [ErrorState];

ストアドプロシージャの定義

CREATE PROCEDUREで定義できる、新規作成時はこれを使う。
ALTER PROCEDUREでプロシージャを更新できる。
DROP PROCEDUREでプロシージャを削除できる。
パラメータを書くと引数がもらえる。引数がない場合はパラメータは省略できる。

CREATE PROCEDURE [プロシージャ名]
  [パラメータ1] [データ型1],
  [パラメータ2] [データ型2] OUTPUT, -- OUTPUTと書くと参照渡しができる(プロシージャ内で変化した値を引数に返却できるということ)
  [パラメータ3] [データ型3] = 0,-- 初期値を入れると引数を省略できる
AS
BEGIN
 -- ここにクエリ郡を書く
END

実行

実行時も引数がない場合、初期値がある場合はパラメータを省略できる。
EXECUTEをEXECにしても動くらしい。

EXECUTE [プロシージャ名] [パラメータ1],[パラメータ2], ...

戻り値の取得

変数の代入にEXECUTEを指定すると引数が代入されるようだ。

@hoge = EXECUTE [プロシージャ名] [パラメータ1],...;

ストアドファンクション

ユーザー定義関数が作成できるらしい、削除する際はDROP FUNCTION

CREATE FUNTION [ストアドファンクション名](
  [パラメータ1] [データ型1],
  [パラメータ2] [データ型2],
)
RETURNS [ストアドファンクションの戻り値のデータ型]
AS
BIGIN
  -- クエリ郡
  RETURN [ストアドファンクションの戻り値]
END

おわり。

SQL
スポンサーリンク
シェアする