sql-server - 在哪里可以找到列数据类型的 Sql Server 元数据?

标签 sql-server tsql sql-server-2005 metadata

我知道我可以通过以下方式访问列属性:

select * 
from sysobjects

但是我找不到有关在哪里获取列的类型和类型长度的信息,即:在

FOO VARCHAR(80)

在哪里可以找到元数据表中类型声明的“VARCHAR(80)”部分?

我尝试查看 systypes 表,但其 xtype 值与 sysobjects 表中的 xtype 值不匹配。

*我无权访问用于构建这些表的原始 SQL,也没有任何管理权限。

如果您熟悉 DB2,我正在寻找相当于

select name,
       coltype,
       length,
  from sysibm.syscolumns
where tbname = 'FOO'

最佳答案

你很接近。您可以查看 sys.columns 来获取列。

您可以使用OBJECT_ID=OBJECT_ID('dbo.Foo')过滤表格。

您可以从sys.columns获取长度。数据类型位于 user_type_id 字段中。该字段的键位于 sys.types 中。

总的来说,你可以这样做:

select object_NAME(c.object_id), c.name, t.name, c.max_length
from sys.columns c
INNER JOIN sys.types t
    ON t.user_type_id = c.user_type_id

顺便说一句,在 SQL Server 中,系统表已被弃用(即 syscolumnssysobjects),建议最佳实践是使用 View ,sys.columnssys.objects

这将为您提供表、列、数据类型和每个表的最大长度。

关于sql-server - 在哪里可以找到列数据类型的 Sql Server 元数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9179990/

相关文章:

c# - LocalDB:更改 SQL Server 默认位置

SQL Server 自动舍入?

sql-server - SQL 计数器变量 @Count += 1

database - sybase系统程序-如何得到结果?

sql-server - 需要帮助理解为什么我在执行期间对具有相同锁定的代码进行脏读

java - 在 SQL 上插入数据

sql-server-2005 - 查询返回列不包含某个子字符串的行

sql - 内部连接顺序和位置对性能有影响吗

SQL 查询 - 从两个不同级别的层次结构中获取总和

xml - 将 varbinary(max) 转换为 xml 格式