簡體   English   中英

如何在SQL Server數據庫中列出用戶定義的類型?

[英]How do I list user defined types in a SQL Server database?

我需要使用CREATE TYPE枚舉在SQL Server數據庫中創建的所有用戶定義類型,和/或找出它們是否已經定義。

使用表或存儲過程,我會做這樣的事情:

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

但是我找不到用戶定義類型的等價物(或合適的替代品)! 我絕對不能在sysobjects看到它們。

任何人都可以開導我嗎?

類型和UDT不會出現在sys.objects中。 您應該能夠通過以下方式獲得所需內容:

select * from sys.types
where is_user_defined = 1

雖然帖子很舊,但我發現使用類似的查詢很有用。 您可能找不到一些有用的格式,但我想要完全限定的類型名稱,我希望看到按順序列出的列。 您可以刪除所有SUBSTRING內容以僅獲取列名稱。

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

為了擴展jwolly2的答案,以下是如何獲得包括標准數據類型在內的定義列表:

-- 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM