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,等.
这将为您提供每个表的表,列,数据类型和最大长度.
正确的方法是在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