¿Cómo enumero los tipos definidos por el usuario en una base de datos de SQL Server?

StackOverflow https://stackoverflow.com/questions/54482

  •  09-06-2019
  •  | 
  •  

Pregunta

Necesito enumerar todos los tipos definidos por el usuario creados en un SQL Server base de datos con CREATE TYPE, y/o averiguar si ya han sido definidos.

Con tablas o procedimientos almacenados haría algo como esto:

if exists (select * from dbo.sysobjects where name='foobar' and xtype='U')
    drop table foobar

Sin embargo, no puedo encontrar el equivalente (o una alternativa adecuada) para los tipos definidos por el usuario.Definitivamente no puedo verlos en ninguna parte sysobjects.

¿Alguien puede iluminarme?

¿Fue útil?

Solución

Los tipos y UDT no aparecen en sys.objects.Debería poder obtener lo que está buscando con lo siguiente:

select * from sys.types
where is_user_defined = 1

Otros consejos

Aunque la publicación es antigua, me resultó útil utilizar una consulta similar a esta.Es posible que parte del formato no le resulte útil, pero quería el nombre de tipo completo y quería ver las columnas enumeradas en orden.Puede eliminar todo el material de SUBSTRING para obtener el nombre de la columna por sí solo.

SELECT USER_NAME(TYPE.schema_id) + '.' + TYPE.name      AS "Type Name",
       COL.column_id,
       SUBSTRING(CAST(COL.column_id + 100 AS char(3)), 2, 2)  + ': ' + COL.name   AS "Column",
       ST.name                                          AS "Data Type",
       CASE COL.Is_Nullable
       WHEN 1 THEN ''
       ELSE        'NOT NULL' 
       END                                              AS "Nullable",
       COL.max_length                                   AS "Length",
       COL.[precision]                                  AS "Precision",
       COL.scale                                        AS "Scale",
       ST.collation                                     AS "Collation"
FROM sys.table_types TYPE
JOIN sys.columns     COL
    ON TYPE.type_table_object_id = COL.object_id
JOIN sys.systypes AS ST  
    ON ST.xtype = COL.system_type_id
where TYPE.is_user_defined = 1
ORDER BY "Type Name",
         COL.column_id

Para ampliar la respuesta de jwolly2, así es como se obtiene una lista de definiciones que incluyen el tipo de datos estándar:

-- User Defined Type definitions TP 20180124
select t1.name, t2.name, t1.precision, t1.scale, t1.max_length as bytes, t1.is_nullable
from sys.types t1
join sys.types t2 on t2.system_type_id = t1.system_type_id and t2.is_user_defined = 0
where t1.is_user_defined = 1 and t2.name <> 'sysname'
order by t1.name
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top