You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测SQL Server表中是否存在UDT及获取其UDT列表

检测SQL Server指定表中的UDT并获取列表

嘿,我来帮你搞定这个关于SQL Server用户自定义类型(UDT)的问题~下面分两步来解决:

一、检测指定表是否存在UDT

你可以通过查询系统视图sys.columns和sys.types来判断目标表是否包含UDT。核心思路是:sys.types里的is_user_defined字段标记了是否为用户自定义类型,关联表的列信息后就能筛选出结果。

执行下面的SQL(记得把YourDatabaseName和YourTableName替换成实际的库名和表名):

USE YourDatabaseName;
GO

IF EXISTS (
    SELECT 1
    FROM sys.columns c
    JOIN sys.types t ON c.system_type_id = t.system_type_id 
                   AND c.user_type_id = t.user_type_id
    WHERE c.object_id = OBJECT_ID('YourTableName')
      AND t.is_user_defined = 1
)
BEGIN
    PRINT '该表存在用户自定义类型(UDT)';
END
ELSE
BEGIN
    PRINT '该表不存在用户自定义类型(UDT)';
END

二、获取指定表中的UDT列表

如果确认表中有UDT,想要拿到具体的列表(包括列名、UDT名称、所属架构等),可以用下面的查询:

USE YourDatabaseName;
GO

SELECT 
    c.name AS 列名称,
    SCHEMA_NAME(t.schema_id) AS UDT所属架构,
    t.name AS UDT名称,
    t.is_user_defined AS 是否为UDT,
    c.max_length AS 列长度,
    c.is_nullable AS 是否允许为空
FROM sys.columns c
JOIN sys.types t ON c.system_type_id = t.system_type_id 
               AND c.user_type_id = t.user_type_id
WHERE c.object_id = OBJECT_ID('YourTableName')
  AND t.is_user_defined = 1
ORDER BY c.column_id;

简单解释下查询里的关键字段:

  • c.name:表中使用了UDT的列名
  • SCHEMA_NAME(t.schema_id):UDT所属的架构(比如dbo或者自定义架构)
  • t.name:用户自定义类型的名称
  • is_user_defined:确认该类型是用户自定义的(值为1)

如果你的UDT是CLR用户自定义类型,还可以额外关联sys.assembly_types来获取更多CLR相关信息,比如程序集名称:

USE YourDatabaseName;
GO

SELECT 
    c.name AS 列名称,
    SCHEMA_NAME(t.schema_id) AS UDT所属架构,
    t.name AS UDT名称,
    a.assembly_name AS 关联CLR程序集名称
FROM sys.columns c
JOIN sys.types t ON c.system_type_id = t.system_type_id 
               AND c.user_type_id = t.user_type_id
JOIN sys.assembly_types a ON t.user_type_id = a.user_type_id
WHERE c.object_id = OBJECT_ID('YourTableName')
  AND t.is_user_defined = 1
ORDER BY c.column_id;

内容的提问来源于stack exchange,提问作者Rakesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:47:07