【问题标题】:How to print all along with their column names and primary keys?如何打印所有列名和主键?
【发布时间】:2016-08-16 20:40:22
【问题描述】:

此 SQL 查询打印表名、列名和列类型(Data、varchar 等)。

表名列名数据类型

SELECT T.TABLE_NAME,C.COLUMN_NAME,C.DATA_TYPE
    FROM INFORMATION_SCHEMA.COLUMNS C
    INNER JOIN INFORMATION_SCHEMA.TABLES T ON C.TABLE_NAME = T.TABLE_NAME
        AND C.TABLE_SCHEMA = T.TABLE_SCHEMA
    WHERE T.TABLE_TYPE = 'BASE TABLE'

如果此列是复合主键的一部分(见下文),如何更改它以使其也打印?

Table_name Column_Name Is_Primary(y/n) Data_Type


更新:建议的副本相去甚远,因为它谈论的是单个表。接受的答案解决了我的问题。

【问题讨论】:

  • 不是重复的。该答案涉及单个表。我的问题是关于在数据库中显示一组表。
  • 是的,我意识到,但这只是一个系统视图的连接,这个问题解释了如何做到这一点。看到这一点应该不会太远。

标签: sql-server


【解决方案1】:

约束名称和类型在INFORMATION_SCHEMA.TABLE_CONSTRAINTS 中,列名称和约束名称在INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE 中。所以,基本上你最终会添加更多的 JOINS。

SELECT
    T.TABLE_NAME,
    C.COLUMN_NAME,
    C.DATA_TYPE,
    CCU.Constraint_Name,
    CASE TC.Constraint_Type
        WHEN 'PRIMARY KEY' THEN 'Yes'
        ELSE 'No'
    END IsPrimaryKey
FROM INFORMATION_SCHEMA.COLUMNS C
INNER JOIN INFORMATION_SCHEMA.TABLES T
    ON C.TABLE_NAME = T.TABLE_NAME
    AND C.TABLE_SCHEMA = T.TABLE_SCHEMA
LEFT JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE CCU
    ON CCU.TABLE_SCHEMA = T.TABLE_SCHEMA
    AND CCU.TABLE_NAME = T.TABLE_NAME
    AND CCU.COLUMN_NAME = C.COLUMN_NAME
LEFT JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
    ON CCU.Constraint_Name = TC.Constraint_Name
    AND CCU.Table_Name = TC.Table_Name
    AND CCU.TABLE_SCHEMA = TC.TABLE_SCHEMA
WHERE T.TABLE_TYPE = 'BASE TABLE'
ORDER BY T.TABLE_NAME, C.COLUMN_NAME

【讨论】:

  • 正是我想要的。谢谢。
  • 如何在每个新表前添加一个空行?
  • 我想您需要为此发布一个单独的问题;但我不确定
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-17
  • 1970-01-01
  • 1970-01-01
  • 2021-02-20
  • 2012-02-13
  • 1970-01-01
  • 2019-11-28
相关资源
最近更新 更多