Comment puis-je liste de types définis par l'utilisateur dans une base de données SQL Server?

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

  •  09-06-2019
  •  | 
  •  

Question

J'ai besoin d'énumérer tous les types définis par l'utilisateur créé dans un SQL Server base de données avec CREATE TYPE, et/ou de savoir s'ils ont déjà été définis.

Avec des tables ou des procédures stockées j'aimerais faire quelque chose comme ceci:

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

Cependant je ne trouve pas l'équivalent (ou une alternative) pour les types définis par l'utilisateur!Je certainement ne pouvez pas voir n'importe où dans sysobjects.

Quelqu'un peut-il m'éclairer?

Était-ce utile?

La solution

Les Types et les types définis par l'utilisateur n'apparaissent pas dans sys.objets.Vous devriez être en mesure d'obtenir ce que vous recherchez avec les éléments suivants:

select * from sys.types
where is_user_defined = 1

Autres conseils

Bien que le post est vieux, j'ai trouvé utile d'utiliser une requête semblable à cela.Vous ne pouvez pas trouver de la mise en forme utile, mais je voulais le complet le nom du type et je voulais voir les colonnes listées dans l'ordre.Vous pouvez simplement supprimer tous les sous-CHAÎNE trucs pour obtenir juste le nom de la colonne par lui-même.

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

Pour développer sur jwolly2 réponse, voici comment vous obtenez une liste de définitions, notamment le type de données standard:

-- 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top