首页 > 解决方案 > 查询以返回所有数据库的数据库、模式、表、列

问题描述

编辑:我已经编辑了我的原始帖子以增加一些清晰度。

1) 是否可以为服务器上的所有数据库编写一个返回数据库、模式、表、列和列类型的查询?特别是,是否可以将 sys.databases 与其他系统目录视图(例如 sys.tables)连接起来?我无法识别 sys.databases 和 sys.schema、sys.tables 或其他系统目录视图之间的 PK/FK 关系。

2) 否则,是否可以编写一个返回上述内容的查询,其中我提供数据库名称作为参数,例如使用 DB_ID('my_database') 作为该查询的过滤器?如果可能,我宁愿不使用动态 SQL?

3) 否则,如果我必须使用动态 SQL,我可以将该动态 SQL 的结果加载到游标中吗?

背景:我正在编写一个为视图生成代码的存储过程。对于源表中的每个字符列(SP 的参数),我需要调用一个删除垃圾字符的函数。我想在实用程序数据库中创建该 SP,并支持跨多个其他数据库创建视图。

标签: sql-server

解决方案


  1. 对于所有数据库:select * from sys.databases
  2. 对于所有表:从 INFORMATION_SCHEMA.TABLES 中选择 * 其中 TABLE_TYPE ='BASE TABLE'
  3. 从所有视图中选择 * from INFORMATION_SCHEMA.TABLES where TABLE_TYPE ='VIEW'
  4. 来自所有列:从 INFORMATION_SCHEMA.COLUMNS 中选择 * 请使用 table_name 作为过滤器。
  5. 在 INFORMATION_SCHEMA.COLUMNS 表中,您将获得列类型的 DATA_TYPE

首先从 SQL server 数据库加载数据库,然后获取数据库名称并连接到该数据库,然后使用上面的所有查询来获取您需要的内容。


推荐阅读