【问题标题】:SQL Query to list all Table fields and Keys (Foreign & Primary)SQL 查询列出所有表字段和键(外国和主要)
【发布时间】:2017-10-27 15:44:09
【问题描述】:

o/ 大家好,

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

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

是否有一个 sysobjects 查询可用于列出表的所有字段和相应的键? Aaaaaaaand,我是 SQL 新手。我可以解决查询,但在管理方面我不知道。我正在开发 MS SQL Server Management Studio 2017。

感谢好人。

Partial view of tables

附:我知道这可能看起来是重复的,但我们的 IT 部门一次又一次地告诉我,ERP 的数据库一团糟,这就是他们不愿意授权我访问的原因。我认为我们的标准想法可能不适用于这个特定的数据库,因此很长的帖子/描述。

【问题讨论】:

  • 我确定你看过数据库图表选项卡?
  • @BusinessPlanQuickBuilder 是的,我有。没有快乐。
  • @DipenShah 两者都不高兴,因为两者都产生了 0 个结果。
  • 你真的可以确认任何表都有键吗?我曾在一些他们没有的系统中工作过。
  • 在图表上,如果数据库设置正确,您应该能够自动生成它们以获取 ERD。不用说,在尝试之前备份。看到这个链接mssqltips.com/sqlservertip/1816/…

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


【解决方案1】:

我很长时间没有使用 MS SQL,但我认为您可以使用以下内容:

描述表名 或者 sp_columns 表名

希望对您有所帮助。

【讨论】:

  • 谢谢,但也不高兴。第一个出错了,第二个没有结果。
【解决方案2】:

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

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。

解决方法:

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

【讨论】:

  • 谢谢。当我尝试运行它时,我得到“无效的对象名称'Stack.INFORMATION_SCHEMA.COLUMNS'。”这是 IT 应该能够执行的权限错误吗?
  • 不,不是。 [Stack.] 是表名。您需要将 Stack 替换为新的表名。对我的疏忽感到抱歉。 Stack 是我个人的 Stack Overflow 帮助数据库。只需将 Stack 替换为您的数据库,使其看起来像“[YourDatabase].information_schema.columns”
  • 这个请求也不是可笑的,很多 ERP 都有这个问题。对于供应商软件,尤其是 ERP 系统,我个人经历的次数比我想承认的要多。
  • 啊,堆栈。这个论坛中的技术术语是用 x、y 或 z 代替吗?而且,这行得通!得到他们所有。非常感谢好先生。我很震惊许多 ERP 没有这个——在创建这样的环境时似乎很实用。猜猜我猜错了。再次感谢!
  • 不,它不是堆栈格式标准。我的个人 SQL Server 上只有一个名为 stack 的数据库,用于开发答案和测试查询。我只是忘记删除名称。
猜你喜欢
  • 2010-11-25
  • 1970-01-01
  • 1970-01-01
  • 2020-07-07
  • 2010-12-09
  • 2016-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多