SQL Server 2016 SP1 にて導入されていた(らしい)、CREATE OR ALTER
についての備忘録です。
CREATE OR ALTER
読んで字のごとく、未定義のDBオブジェクトに対してはCREATE
文として、定義済みのDBオブジェクトに対してはALTER
文として動作します。
ビュー、ストアドプロシージャ、ユーザー定義関数、トリガーに対して有効だそうです。
そもそもALTERばかりしているのでこの構文の存在に全く気が付きませんでした。
CREATE OR ALTER PROCEDURE [dbo].[uspProc1] AS BEGIN SET NOCOUNT ON; SELECT ... END
それ以前で似たようなことをするとなると、こういう感じでしょうか。
IF OBJECT_ID('[dbo].[uspProc1]','P') IS NOT NULL DROP PROCEDURE [dbo].[uspProc1] GO CREATE PROCEDURE [dbo].[uspProc1] AS BEGIN SET NOCOUNT ON; SELECT ... END
DROP TABLE IF EXISTS
似たようなもので、DROP TABLE IF EXISTS
がありますが、こちらは定義済みの場合はそのテーブルをDROP
することができます。
一時テーブルに対して使う時が多い気がします。
DROP TABLE IF EXISTS [dbo].[Sales]; CREATE TABLE [dbo].[Sales]( ... ) ON [PRIMARY] GO
それ以前であればこんな感じでしょうか。
IF OBJECT_ID('[dbo].[Sales]','U') IS NOT NULL DROP TABLE[dbo].[Sales] GO CREATE TABLE [dbo].[Sales]( ... ) ON [PRIMARY]