SQL Query列出所有表字段和键(外部和主要)

时间:2017-10-27 15:44:10

标签: sql sql-server database database-schema database-administration

o / Hello All,

我正在尝试为ERP创建一个架构,这个架构很可笑,并没有为其数据库中的62个表创建一个架构。我工作的人,没有DBA,所以我试图自己解决这个问题。另外,我没有数据库所有者规则,并认为这限制了我可以查看的内容;但是,我已经确认这不是标准架构/图表

我搜索并尝试了我在这里找到的十几个查询但是没有得到我正在寻找的信息。

是否有可用于列出所有表格字段和相应密钥的sysobjects查询? Aaaaaaa,我是SQL的新手。我可以解决问题,但在管理方面我不知道。我正在使用MS SQL Server Management Studio 2017。

感谢好心人。

Partial view of tables

P.S。我知道这可能看似重复,但我的IT部门一次又一次地告诉我,ERP的数据库很乱,这也是他们不愿意授权我访问的原因。我认为我们的标准思想可能不适用于这个特定的数据库,因此需要很长的帖子/描述。

2 个答案:

答案 0 :(得分:0)

我已经使用MS SQL了很长时间,但我认为你可以使用以下内容:

描述table_name 要么 sp_columns table_name

希望有所帮助。

答案 1 :(得分:0)

以下脚本将为您提供所有表名,列名,每列的数据类型,列的宽度,键是主键还是辅助键,以及引用的外键表和列。

SELECT SA.TABLE_NAME,
       SA.COLUMN_NAME, 
       SA.DATA_TYPE, 
       SA.CHARACTER_MAXIMUM_LENGTH AS Column_Width,
       PK.type AS PRIMARY_KEY,
       FK.type AS Foriegn_KEY, 
       SAU.CONSTRAINT_NAME,
       SO.[Name] + '_' + SAU.COLUMN_NAME Referenced_Table_Column
FROM Stack.INFORMATION_SCHEMA.COLUMNS AS SA
LEFT JOIN STACK.INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS SAU
    ON SAU.COLUMN_NAME = SA.COLUMN_NAME
LEFT JOIN sys.foreign_keys AS FK
    ON FK.[NAME] = SAU.CONSTRAINT_NAME
LEFT JOIN sys.key_constraints AS PK
    ON PK.[NAME] = SAU.CONSTRAINT_NAME
LEFT JOIN sys.objects AS SO 
    ON SO.object_id = FK.referenced_object_id OR
       SO.object_id = PK.parent_object_id

可能的限制:

  1. 您可能没有足够的权限使数据库能够运行此查询,因为它使用sys表和information_schema。
  2. 解决方法:

    1. 您是否有IT管理员为您运行查询并将数据导出为CSV或Excel文件。