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

概要

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

参考資料

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

コードとか

宣言とか代入とか表示

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

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

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

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

IF文

WHILE文も似たようなものなので省略

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

例外処理

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

おわり。