SQL Server ストアドで「CREATE OR REPLACE」を使う方法

SQL Serverのストアドには、Oracleでよく使われる「CREATE OR REPLACE」がありません。

SQL Serverで「CREATE OR REPLACE」に代わる方法を説明します。

SQL Server ストアドで「CREATE OR REPLACE」を使う方法

SQL Serverには作成&上書きモードがない

SQL Serverのストアドプロシージャを作成するには「CREATE PROCEDURE~」「CREATE FUNCTION~」を使用します。

例えばこんなストアドプロシージャを書きました。

-- プロシージャを作成する 
CREATE PROCEDURE dbo.proA(@iEno int)
AS
BEGIN
 --UPDATE実行
  UPDATE emp 
  SET ord_no = 0
  WHERE empno = @iEno;
END
GO

このCREATE文は新規で作成する場合はこれでいいですが、修正して上書きする際に困ります。

Oracleでは「CREATE OR REPLACE PROCEDURE」とすれば、新規でも上書きでもどちらでも対応できるようになり、これが常識です。

ところが、SQL Serverにはありません。

上書きするときは、「CREATE PROCEDURE」を「ALTER PROCEDURE」にしないといけません。これはかなり面倒です。

プログラムを2つ用意する、もしくは手動で書き換える手間がかかります。

SQL ServerではDROPすればいい

SQL Serverでは「CREATE OR REPLACE」は使えないのが不便ですね。

こういう場合は、一度強制的にストアドを削除(DROP)してからCREATEすればよいかと。

先程のCREATE文を書き換えてみます。

-- プロシージャを削除する 
DROP PROCEDURE dbo.proA
GO

-- プロシージャを作成する 
CREATE PROCEDURE dbo.proA(@iEno int)
AS
BEGIN
 --UPDATE実行
  UPDATE emp 
  SET ord_no = 0
  WHERE empno = @iEno;
END
GO

「CREATE PROCEDURE」の前に「DROP PROCEDURE」でプロシージャーを削除しました。こうすれば、「CREATE」を「ALTER」 に修正する手間が省けます。

しかし、DROPしてからCREATEするまでの間はこのストアドが使えないので注意してください。

時間的には短いですが、常時使用されるストアドプロシージャでの使用はやめた方がよいです。

以上、SQL Serverのストアドで「CREATE OR REPLACE」の代わりのSQLでした。

コメント

  1. より:

    CREATE OR ALTER は使えないですか?

タイトルとURLをコピーしました