valores usuario una tipos tablas tabla sintaxis por para funciones ejemplos definidos definidas crear con sql sql-server sql-server-2008 tsql user-defined-types

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) );