una - ¿Cómo verificar la existencia del tipo de tabla definido por el usuario en SQL Server 2008?
tipos de funciones en sql server (5)
Tengo un tipo de tabla definido por el usuario. Quiero verificar su existencia antes de editar en un parche usando la función OBJECT_ID(name, type)
.
¿Qué type
de la enumeration debe pasar para los tipos de tabla definidos por el usuario?
N''U''
like for user defined table no funciona, es decir, IF OBJECT_ID(N''MyType'', N''U'') IS NOT NULL
Los siguientes ejemplos me funcionan, tenga en cuenta "is_user_defined" NOT "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
Puede buscar en sys.types o usar TYPE_ID:
IF TYPE_ID(N''MyType'') IS NULL ...
Solo una precaución: el uso de type_id no verificará que el tipo sea de tipo tabla , solo que existe un tipo con ese nombre. De lo contrario, la consulta de gbn es probablemente mejor.
También puede usar el sistema table_types view
IF EXISTS (SELECT *
FROM [sys].[table_types]
WHERE user_type_id = Type_id(N''[dbo].[UdTableType]''))
BEGIN
PRINT ''EXISTS''
END
IF EXISTS (SELECT * FROM sys.types WHERE is_table_type = 1 AND name = ''MyType'')
--stuff
sys.types ... no son objetos con ámbito de esquema, por lo que no estarán en sys.objects
Actualización, mar 2013
También puedes usar 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)
);