使用模式获取表名

时间:2012-10-25 09:46:49

标签: sql-server schema

我在存储过程中看到过这样的一些查询

SELECT ORDINAL_POSITION 'column_id', column_name 'column_name', 
         column_name + ' : ' + data_type 'column_nametype',
         data_type 'data_type',
         CHARacter_maximum_length 'SIZE'
     FROM information_schema.columns
     WHERE table_name = @TableName

但是我发现information_schema.columns不是表名,它是一个模式,但它是如何检索数据的?我怎么知道实际的表名?模式的用途是什么?

2 个答案:

答案 0 :(得分:0)

INFORMATION_SCHEMA视图驻留在服务器上的Master数据库中,是一种特殊类型的视图,它将从数据库上下文中检索数据。也就是说,虽然它们位于主数据库中,但它们将检索您当前使用的任何数据库的信息。

就像任何其他视图一样,您可以看到这些视图的来源。在给定的特定示例中,它使用sys.columns,sys.objects和sys.types,它们本身就是系统视图。

虽然sys.types之类的视图是源代码可用的视图,但其中的某些系统表/视图不可用于直接引用。例如,sys.sysscalartypes对用户不可用,系统函数sysconv也不可用。

INFORMATION_SCHEMA视图的用户不仅限于SQL Server,尽管这些实现似乎是特定于平台的。例如,MySQL有自己的INFORMATION_SCHEMA结构。

不鼓励使用旧的sysobjects(而不是sys.objects)系统表,因为无法保证将来继续使用它们。必须要说的是,INFORMATION_SCHEMA虽然通常很有用但并不总是暴露出DBA所需的信息级别。

答案 1 :(得分:0)

尝试此查询:

    DECLARE @TableName NVARCHAR(MAX)

    SET @TableName = 'tblTest'

    SELECT 
            column_id 'column_id', columns.name 'column_name'
           ,columns.name + ' : ' + types.name 'column_nametype'
           ,types.name  'data_type'
           ,columns.max_length 'SIZE'
    FROM 
        sys.columns
    INNER JOIN
        sys.types
    ON
        types.system_type_id = columns.system_type_id
    WHERE 
        objecT_id = OBJECT_ID(@TableName)
    ORDER BY 
        Column_id