LoginSignup
8

More than 5 years have passed since last update.

【随時更新】SQL Server,Transact-SQLの初心者メモ

Last updated at Posted at 2015-06-19

はじめに

今携わっているプロジェクトではRDBMSはSQL ServerでTransact-SQLを使いストアドプロシージャを作成しています。ストアドを作っていく中で、「あれ、これってどういう風に書いたらいいんだろう?」とか「デバッグの仕方わかんねー!」などあり、調べてわかったことがチョコチョコ出てきたので、ここにまとめようと思います。

あと、SQL Server, SQL Server Management Studioを触って気づいたこともメモっていこうと思います

ストアドプロシージャ

基本構文系

カーソル使ってループをまわす

DECLARE <cursor name> CURSOR FOR
SELECT
    hoge
FROM
    HOGE_TABLE

OPEN <cursor name>
FETCH NEXT FROM <cursor name> into @hoge

WHILE @@FETCH_STATUS = 0
BEGIN
    ・・・ ↓がBEGINENDの最終行
    FETCH NEXT FROM <cursor name> into @hoge
END

上記だと、HOGE_TABLEに入っているhogeを順番に取得して@hogeの中に詰め込むことができます。

ただ、下のような書き方だと上手くループしませんでした。(取得できる行数が1行としたときに、何故かループが2回まわる) 原因分かる方がいたら教えてください:scream_cat:

DECLARE <cursor name> CURSOR FOR
SELECT
    hoge
FROM
    HOGE_TABLE

OPEN <cursor name>


WHILE @@FETCH_STATUS = 0
BEGIN
    FETCH NEXT FROM <cursor name> into @hoge
    ・・・ ↑がBEGINENDの最初の行
END

デバッグ系

ストアド内で使っている一時テーブルの中身を見る

そういう時は、tempdbに突っ込んでおくと良さ気
見終わったら削除を忘れずに・・・

SELECT * INTO tempdb.dbo.temp_table FROM #temp_talbe;

ちなみに、Management Studioを使っているなら普通にSELECT文を書けばコンソールに吐き出してくれます。なので、下記のようにするとエラーも見れます。

TRY・・・CATCH構文でキャッチしたエラーを見る

・・・
BEGIN TRY
・・・
END TRY

BEGIN CATCH
  SELECT
    ERROR_NUMBER() AS ErrorNumber
    ,ERROR_SEVERITY() AS ErrorSeverity
    ,ERROR_STATE() AS ErrorState
    ,ERROR_PROCEDURE() AS ErrorProcedure
    ,ERROR_LINE() AS ErrorLine
    ,ERROR_MESSAGE() AS ErrorMessage;
END CATCH

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
8