web-dev-qa-db-ja.com

ドロップする前に、ユーザー定義タイプが存在するかどうかを確認します

sp_droptypeプロシージャを使用して、ユーザー定義タイプを削除できます。

そのため、sp_droptypeを使用して呼び出す "クリーン"スクリプトに、このようなsqsh -i呼び出しがいくつかあります。ただし、タイプが実際に存在する場合にのみsp_droptypeを条件付きで呼び出すことや、タイプが存在しない場合にサイレントになるように指示することはできません。

型が存在するかどうかをテストし、実際に存在する場合にのみsp_droptypeを呼び出す方法はありますか?これにより、よりクリーンな出力が得られます。

これはSQL Serverと同じように機能します。次のスタイルの構成を使用します。

_IF OBJECT_ID('dbo.MyObject') IS NOT NULL
BEGIN
    EXEC sp_droptype 'dbo.MyObject';
END
_

OBJECT_ID(...)は、現在のデータベースに格納されているすべてのオブジェクトの sysobjectsからのobject_id を表す整数を返します。オブジェクトが存在しない場合は、NULLを返します。

オブジェクトの存在をテストする別の方法:

_IF EXISTS (SELECT 1 FROM systypes st WHERE st.name = 'MyType')
BEGIN
   EXEC sp_droptype 'MyType';
END
_

現時点ではASEで型を作成する機能がないため、OBJECT_ID()が機能するかどうかははっきりとはわかりません。

2
Max Vernon