とりあえず半歩

学んだことを1日1個、簡単なことでも良いから記録していきたい。

一時テーブルが存在していたら削除する

課題

SQL Server Management Studio上で一時テーブルを使ったクエリをテストしているとき、テスト前に毎回一時テーブルを手動で削除するのが面倒。テスト実行時に一時テーブルが存在していたら削除して作りなおすようにしたい。

実行

実行環境はSQL Server 2008 R2 Express + Management Studio。

サンプルに使うテーブルは前回も使ってた自作のfruitsテーブル。

OBJECT_ID関数を使って一時テーブルが存在するかどうか調べて、存在するなら削除する。

関数の2つ目の引数'U'は、検索するデータベースオブジェクトとしてユーザー定義のテーブルを指定するってことのよう。

IF OBJECT_ID( N'[tempDB]..[#totalPrice]', N'U' ) IS NOT NULL
  BEGIN
    DROP TABLE [#totalPrice];
  END

SELECT
    [Name]
  , SUM( [Price] ) AS [Total]
INTO
  [#totalPrice]
FROM
  [fruits]
GROUP BY
  [Name]
ORDER BY
  [Name];

SELECT * FROM [#totalPrice];

SELECTクエリの結果は省略。

これでもう次のようなメッセージを見てがっくりすることはない。

メッセージ 2714、レベル 16、状態 6、行 1 データベースに '#totalPrice' という名前のオブジェクトが既に存在します。

評価

クエリを繰り返す時は便利。1,2回流して終わりのクエリだといちいち打つのはだるい。

参考