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

avg*_*tvs 12 t-sql sql-server metadata sql-server-2005

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

select * 
from sysobjects
Run Code Online (Sandbox Code Playgroud)

然而,我找不到的信息是关于从哪里获取列的类型和类型长度,即:in

FOO VARCHAR(80)
Run Code Online (Sandbox Code Playgroud)

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

我试着查看systypes表,但是它的xtype值与sysobjects表中的xtype值不匹配.

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

如果您熟悉DB2,我正在寻找等效的

select name,
       coltype,
       length,
  from sysibm.syscolumns
where tbname = 'FOO'
Run Code Online (Sandbox Code Playgroud)

JNK*_*JNK 16

你很亲密 您可以查看sys.columns获取列.

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

你可以从中得到长度sys.columns.数据类型在system_type现场.该字段的键是在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.system_type_id = c.system_type_id
Run Code Online (Sandbox Code Playgroud)

作为一个方面说明,在SQL Server中的系统表已过时(即syscolumns,sysobjects),它的推荐使用的意见,而不是最好的做法,sys.columns,sys.objects,等.

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

  • 连接应该使用t.user_type_id而不是c.user_type_id.如果该列是用户定义的字段,您将获得每个字段的多个结果.在t.user_type_id = c.system_type_id上​​加入sys.types t (9认同)

All*_*owe 6

正确的方法是在sys.types表中加入用户 _type_id:

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
Run Code Online (Sandbox Code Playgroud)

user_type_id与系统类型的system_type_id相同-请参见文档:https : //msdn.microsoft.com/zh-CN/library/ms188021.aspx