0

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

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 不是表名,它是一个模式,但它是如何检索数据的?我怎么知道实际的表名?模式的用途是什么?

4

2 回答 2

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
于 2012-10-25T10:04:23.130 回答
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 所需的信息级别。

于 2012-10-25T09:59:37.587 回答