Wie Liste ich Benutzer-definierte Typen in einer SQL Server-Datenbank?
-
09-06-2019 - |
Frage
Ich brauche, um alle aufzuzählen, die benutzerdefinierten Typen in einem SQL Server
Datenbank mit CREATE TYPE
, und/oder finden Sie heraus, ob Sie bereits definiert wurden.
Mit Tabellen oder gespeicherten Prozeduren, ich würde so etwas wie dies tun:
if exists (select * from dbo.sysobjects where name='foobar' and xtype='U')
drop table foobar
Aber ich kann nicht finden, die gleichwertig (oder eine geeignete alternative) für Benutzer-definierte Typen!Ich kann definitiv nicht sehen, wie Sie überall in sysobjects
.
Kann jemand mich aufklären?
Lösung
Typen und UDTs erscheinen nicht in sys.objects. Sie sollten in der Lage sein, zu bekommen, was Sie suchen mit dem folgenden:
select * from sys.types
where is_user_defined = 1
Andere Tipps
Obwohl die Post alt ist, fand ich es nützlich, eine Abfrage ähnlich wie diese zu verwenden. Sie können nicht einen Teil der Formatierung nützlich finden, aber ich wollte die voll qualifizierten Typnamen und ich wollte, dass die Spalten aufgeführt, um zu sehen. Sie können nur alle der SUBSTRING Sachen entfernen, um einfach von selbst die Spaltennamen zu erhalten.
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
auf jwolly2 Antwort zu erweitern, ist hier, wie Sie eine Liste von Definitionen, einschließlich dem Standard-Datentypen erhalten:
-- 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