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?

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top