1. はじめに:そのIF EXISTS、もう卒業しませんか?
SQL Serverでビューやストアドプロシージャを更新するとき、毎回こんなコード書いてませんか?
IF EXISTS (SELECT * FROM sys.views WHERE name = '社員ビュー')
DROP VIEW dbo.社員ビュー;
CREATE VIEW dbo.社員ビュー AS
SELECT 社員ID, 氏名 FROM dbo.社員;安全だけど、DROPの瞬間に依存関係でエラーになったり、スクリプトが長くて読みにくいのが悩みどころ…。
2. CREATE OR ALTER とは?
SQL Server 2016 SP1 以降で使える構文で、以下のオブジェクトに対応しています:
| オブジェクト | 対応 |
|---|---|
| VIEW | ✅ OK |
| PROCEDURE | ✅ OK |
| FUNCTION | ✅ OK |
| TRIGGER | ✅ OK |
| TABLE | ❌ NG(使えません!) |
3. Before → After:スクリプトがこう変わる!
Before(従来のIF EXISTSパターン):
IF EXISTS (SELECT * FROM sys.procedures WHERE name = '社員一覧取得')
DROP PROCEDURE dbo.社員一覧取得;
CREATE PROCEDURE dbo.社員一覧取得 AS
SELECT * FROM dbo.社員;After(CREATE OR ALTER):
CREATE OR ALTER PROCEDURE dbo.社員一覧取得 AS
SELECT * FROM dbo.社員;再実行してもエラーなし! 依存関係も壊さない! スクリプトが短くて読みやすい!
テーブルには使えないので注意!
4. テーブルには使えないので注意!
-- これはエラーになります!
CREATE OR ALTER TABLE dbo.社員 (
社員ID INT PRIMARY KEY
);テーブルの場合は、従来通り IF NOT EXISTS + CREATE や ALTER を使い分けましょう。
5. まとめ:再実行可能なスクリプトで運用が変わる!
CREATE OR ALTERは現場の味方!- デプロイ・マイグレーションがシンプルに
- テーブル以外はこれでOK!

コメント