概要
急遽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
おわり。
