首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何列出SQL Server数据库中的用户定义类型?

如何列出SQL Server数据库中的用户定义类型?
EN

Stack Overflow用户
提问于 2008-09-10 15:48:22
回答 3查看 59.7K关注 0票数 40

我需要使用CREATE TYPE枚举在SQL Server数据库中创建的所有用户定义类型,并且/或者确定它们是否已经定义。

对于表或存储过程,我会这样做:

代码语言:javascript
运行
复制
if exists (select * from dbo.sysobjects where name='foobar' and xtype='U')
    drop table foobar

但是,我找不到用户定义类型的等效类型(或合适的替代类型)!我在sysobjects的任何地方都看不到它们。

有谁能开导我吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-09-10 15:53:12

类型和UDT不会出现在sys.objects中。您应该能够通过以下内容获得您正在寻找的内容:

代码语言:javascript
运行
复制
select * from sys.types
where is_user_defined = 1
票数 83
EN

Stack Overflow用户

发布于 2015-07-22 05:22:08

虽然这篇文章很旧,但我发现使用类似于下面这样的查询是很有用的。您可能不会发现一些格式有用,但我想要的是完全限定的类型名称,并且我希望看到按顺序列出的列。您可以删除所有的SUBSTRING内容,只获得列名本身。

代码语言:javascript
运行
复制
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
票数 16
EN

Stack Overflow用户

发布于 2018-01-24 23:47:22

为了扩展jwolly2的答案,下面是如何获得包括标准数据类型在内的定义的列表:

代码语言:javascript
运行
复制
-- 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
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档