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
);
Ответ 2
Используйте TYPE_ID
Или запрос sys.table_types
Ответ 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 проверяет, что тип таблицы используется в любых хранимых процедурах, в противном случае это вызовет ошибку, как в таблице. Тип имеет зависимости