Comment puis-je liste de types définis par l'utilisateur dans une base de données SQL Server?
-
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?
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