我需要使用CREATE TYPE
枚举在SQL Server
数据库中创建的所有用户定义类型,和/或查看它们是否已经定义。
对于表或存储过程,我会这样做:
if exists (select * from dbo.sysobjects where name='foobar' and xtype='U')
drop table foobar
但是我找不到用户定义类型的等价物(或者合适的替代品)!我在sysobjects
中绝对找不到它们。
有人能给我点化一下吗?
我需要使用CREATE TYPE
枚举在SQL Server
数据库中创建的所有用户定义类型,和/或查看它们是否已经定义。
对于表或存储过程,我会这样做:
if exists (select * from dbo.sysobjects where name='foobar' and xtype='U')
drop table foobar
但是我找不到用户定义类型的等价物(或者合适的替代品)!我在sysobjects
中绝对找不到它们。
有人能给我点化一下吗?
3条答案
按热度按时间von4xj4u1#
类型和UDT不会出现在sys.objects中。您应该能够通过以下命令获得所需的内容:
qyuhtwio2#
虽然这篇文章很老了,但我发现使用类似的查询很有用。你可能觉得有些格式没有用,但我想要完全限定的类型名称,我想看到按顺序列出的列。你可以删除所有SUBSTRING内容,只得到列名本身。
gdrx4gfi3#
原文评论:
为了扩展jwolly 2的答案,下面是如何获得包括标准数据类型在内的定义列表:
在注解中编辑:
我刚刚添加了对查询别名/格式的更新,以使查询更具可读性,并更新了连接键,用于消除在“is_user_defined”= 0时过滤掉重复的“system_type_id”值的需要。
这里的想法是我们可以在sys.types表中找到关于类型的信息。
1.当“is_user_defined”= 0时,它是内置类型
1.当“system_type_id”与同一记录上的“user_type_id”匹配时,它是系统类型。
1.当“is_user_defined”= 1时,相关系统类型的“user_type_id”将与用户定义类型的“system_type_id”相同
1.“max_length”字段指的是最大长度,以字节为单位(与字符相反- NVARCHAR(10)为20 / VARCHAR(10)为10)
类型信息查询: