T-SQL DROP TYPE IF EXISTS

В настоящее время я работаю над сценарием на T-SQL в SQL Server 2014.

Мне нужно удалить определенный пользователем тип таблицы, но только если он существует, и создать его снова после удаления/удаления типа.

Я провел некоторое исследование в Интернете и нашел решение, которое, к сожалению, не работает вообще.

Мой текущий скрипт выглядит так:

IF OBJECT_ID('MySchema.tProjectType', 'U') IS NOT NULL
        DROP TYPE [MySchema].[tProjectType];

CREATE TYPE [MySchema].[tProjectType] AS TABLE
    (
        Id INT
        , IsPrivate BIT
        , IsPublic BIT
    );

Мое сообщение об ошибке:

Тип "MySchema.tProjectType" уже существует, или у вас нет разрешения на его создание.

Знаете ли вы, как успешно проверить, существует ли определенный пользователем тип таблицы, прежде чем я смогу удалить его в SQL Server 2014?

Ответ 1

Попробуйте это, используйте type_id вместо object_id

IF type_id('[MySchema].[tProjectType]') IS NOT NULL
        DROP TYPE [MySchema].[tProjectType];


CREATE TYPE [MySchema].[tProjectType] AS TABLE
    (
        Id INT
        , IsPrivate BIT
        , IsPublic BIT
    );

Ответ 3

Попробуйте это

IF EXISTS (SELECT 1 FROM sys.types WHERE is_table_type = 1 AND name ='tProjectType') 
    Begin
         DROP TYPE [tProjectType];
         CREATE TYPE [tProjectType] AS TABLE
            (
                 Id INT
                , IsPrivate BIT
                , IsPublic BIT
            );
        END

Перед тем, как тип таблицы Droping проверяет, что тип таблицы используется в любых хранимых процедурах, в противном случае это вызовет ошибку, как в таблице. Тип имеет зависимости