【问题标题】:How can columns in SYS schema tables be queried?如何查询 SYS 模式表中的列?
【发布时间】:2019-01-08 16:02:57
【问题描述】:

查询 INFORMATION_SCHEMA.COLUMNS 将检索表中的列名。

SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME = 'EMR_FACILITY'
ORDER BY ORDINAL_POSITION

但是,INFORMATION_SCHEMA 中似乎没有 SYS 架构信息。

SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'sys' AND TABLE_NAME = 'DM_OS_SCHEDULERS'
ORDER BY ORDINAL_POSITION

SELECT DISTINCT TABLE_SCHEMA
FROM INFORMATION_SCHEMA.COLUMNS

如何查询 SYS 模式表中的列?

【问题讨论】:

  • 也许[sys].[syscolumns] 是您要找的表?
  • 为什么需要查询sys 对象的元数据?它们内置于产品中,不受随机更改的影响。

标签: sql sql-server


【解决方案1】:

sys.system_views持有系统视图,可以通过自己的sys视图查看。

所有系统视图:

SELECT 
    SCHEMA_NAME(T.schema_id), 
    T.* 
FROM 
    sys.system_views T
WHERE
    SCHEMA_NAME(T.schema_id) = 'sys'

一个特定的系统视图列:

SELECT * FROM sys.system_columns AS T 
WHERE T.object_id = (SELECT X.object_id FROM sys.system_views AS X WHERE X.name = 'database_principals')

您可以按照自己的方式加入这些以获取所有视图的所有列,以及列数据类型。

【讨论】:

    【解决方案2】:

    您可以在系统目录中获取更多详细信息(精度、长度、如果为空等)

    SELECT
         o.name AS [Table_Name]
        ,c.name AS [Column_Name]
    FROM sys.columns c
    JOIN sys.objects o ON c.object_id = c.object_id
    WHERE o.type = 'U' /* -> User Table*/
    AND o.name = 'TABLE_NAME'
    

    【讨论】:

    【解决方案3】:

    sys.dm_os_schedulers 是来自master DB 的视图(不是表)。你可以看到它的列如下:

    select * from master..syscolumns
    where id=Object_Id('master.sys.dm_os_schedulers')
    order by colid
    

    select * from master.sys.system_columns
    where object_id=Object_Id('master.sys.dm_os_schedulers')
    order by column_id
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-30
      • 1970-01-01
      • 2011-03-01
      • 1970-01-01
      • 2023-01-25
      相关资源
      最近更新 更多