Как проверить наличие пользовательского типа таблицы в SQL Server 2008?
у меня есть пользовательский тип таблицы. Я хочу проверить его существование перед редактированием в патче с помощью .
что type
С перечисление должны быть переданы для пользовательских типов таблиц?
N'U'
как для пользовательской таблицы не работает, т. е. IF OBJECT_ID(N'MyType', N'U') IS NOT NULL
5 ответов:
вы можете посмотреть в sys.типы или использовать TYPE_ID:
IF TYPE_ID(N'MyType') IS NULL ...
просто предосторожность: использование type_id не будет проверять, что тип является таблица тип--Только что тип с таким именем существует. В противном случае запрос gbn, вероятно, лучше.
IF EXISTS (SELECT * FROM sys.types WHERE is_table_type = 1 AND name = 'MyType') --stuff
sys.типы... они не являются объектами схемы, так что не будет sys.объекты
Обновление, Март 2013
можно использовать TYPE_ID слишком
IF EXISTS(SELECT 1 FROM sys.types WHERE name = 'Person' AND is_table_type = 1 AND SCHEMA_ID('VAB') = schema_id) DROP TYPE VAB.Person; go CREATE TYPE VAB.Person AS TABLE ( PersonID INT ,FirstName VARCHAR(255) ,MiddleName VARCHAR(255) ,LastName VARCHAR(255) ,PreferredName VARCHAR(255) );
следующие примеры работают для меня, обратите внимание "is_user_defined" не "is_table_type"
IF TYPE_ID(N'idType') IS NULL CREATE TYPE [dbo].[idType] FROM Bigint NOT NULL go IF not EXISTS (SELECT * FROM sys.types WHERE is_user_defined = 1 AND name = 'idType') CREATE TYPE [dbo].[idType] FROM Bigint NOT NULL go