1. ホーム
  2. sql

[解決済み] SQLデータベースに関数が存在するかどうかを確認する方法は?

2022-04-28 12:35:36

質問

ある関数がデータベースに存在するかどうかを調べて、それを削除して再び作成できるようにする必要があります。基本的には、ストアドプロシージャに使用している次のコードのようなものでなければなりません。

IF EXISTS (
     SELECT  *
     FROM    dbo.sysobjects
     WHERE   id = OBJECT_ID(N'[dbo].[SP_TEST]')
             AND OBJECTPROPERTY(id, N'IsProcedure') = 1 )

解決方法は?

を使ったスクリプトの場合、SSMS が使用するのはこれです。 DROP and CREATE オプション

IF EXISTS (SELECT *
           FROM   sys.objects
           WHERE  object_id = OBJECT_ID(N'[dbo].[foo]')
                  AND type IN ( N'FN', N'IF', N'TF', N'FS', N'FT' ))
  DROP FUNCTION [dbo].[foo]

GO 

この方法で変更を反映させると、オブジェクトのすべてのパーミッションを再作成する必要があるため、次のようなことを考慮する必要があります。 ALTER -は、代わりに Exists とします。