sql - T-SQL:如何通过列的 ID 获取用户定义的数据类型?

标签 sql sql-server sql-server-2005 t-sql

我有一个这样的查询:

SELECT TABLE_NAME, COLUMN_NAME, IS_NULLABLE, DATA_TYPE
FROM MY_DB.INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'OrderId'
ORDER BY TABLE_NAME
GO

OrderId 列是用户定义的数据类型。但查询中的 DATA_TYPE 会显示底层系统类型(即 bigint)。如何显示用户定义的类型名称?

最佳答案

您可以更改Where子句:

SELECT 
    c.name as ColumneName, 
    c.colid As ColumnOrder, 
    st.name as UserType,
    bt.name as BaseType
FROM dbo.syscolumns c
INNER JOIN dbo.systypes st ON st.xusertype = c.xusertype
INNER JOIN dbo.systypes bt ON bt.xusertype = c.xtype
WHERE c.id = OBJECT_ID('TableName')
ORDER BY c.colid

编辑 - 更完整的版本 - 享受!!

SELECT 
    OBJECT_NAME(c.id) as TableName,
    c.name as ColumnName, 
    c.colid As ColumnOrder, 
    st.name as UserType,
    bt.name as BaseType
FROM 
    dbo.syscolumns c
    INNER JOIN dbo.systypes st ON st.xusertype = c.xusertype
    INNER JOIN dbo.systypes bt ON bt.xusertype = c.xtype
WHERE 
    OBJECTPROPERTY(c.id,'ISTABLE') = 1
    AND c.name = 'ColumnName'
ORDER BY
    OBJECT_NAME(c.id), 
    c.colid

关于sql - T-SQL:如何通过列的 ID 获取用户定义的数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/254671/

相关文章:

mysql - 如何插入和更新带有汉字的查询

sql - 从相同的列但不同的条件计数

sql - SQL中K-mer/n-gram的实现

sql-server - 根据数量字段返回多个结果

sql - 需要检索表 A 中的所有记录,并且只检索表 B 中最后更新的一条记录

sql-server - SQLServer docker : How do I backup & restore the data *volume*?

sql - SSIS 中的相交和排除结果如何

sql-server-2005 - 删除链接到 Microsoft Access 的慢速 SQL Server 表

sql-server-2005 - 从相对路径批量插入图像

sql - 根据两个不同表中的时间戳和名称进行排序查询