2012-02-07 47 views
10

我知道我能得到通过访问列属性:我在哪里可以找到列数据类型的Sql Server元数据?

select * 
from sysobjects 

我找不到不过是在哪里得到一个列的类型和类型的长度,即信息:在

FOO VARCHAR(80) 

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

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

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

如果你熟悉DB2我在寻找相当于

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

回答

14

你接近。您可以查看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 

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

这将给你每个人的表,列,数据类型和maxlength。

+7

的加入应该使用t.user_type_id而不是c.user_type_id。如果该列是用户定义的字段,则您将获得每个结果的多个结果。 在t.user_type_id = c.system_type_id上​​加入sys.types t – 2013-11-12 02:31:01

4

正确的方法做,这是加盟用户在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 

user_type_id是相同的system_type_id系统类型 - 见文档:https://msdn.microsoft.com/en-gb/library/ms188021.aspx

相关问题