【问题标题】:Get the table name using schema使用模式获取表名
【发布时间】:2012-10-25 18:04:23
【问题描述】:

我在存储过程中见过这样的查询

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

【问题讨论】:

标签: sql-server schema


【解决方案1】:

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 所需的信息级别。

【讨论】:

    【解决方案2】:

    试试这个查询:

        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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-09
      • 1970-01-01
      • 2012-01-03
      • 1970-01-01
      • 2019-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多