sql-server - 查询以返回所有数据库的数据库、模式、表、列
问题描述
编辑:我已经编辑了我的原始帖子以增加一些清晰度。
1) 是否可以为服务器上的所有数据库编写一个返回数据库、模式、表、列和列类型的查询?特别是,是否可以将 sys.databases 与其他系统目录视图(例如 sys.tables)连接起来?我无法识别 sys.databases 和 sys.schema、sys.tables 或其他系统目录视图之间的 PK/FK 关系。
2) 否则,是否可以编写一个返回上述内容的查询,其中我提供数据库名称作为参数,例如使用 DB_ID('my_database') 作为该查询的过滤器?如果可能,我宁愿不使用动态 SQL?
3) 否则,如果我必须使用动态 SQL,我可以将该动态 SQL 的结果加载到游标中吗?
背景:我正在编写一个为视图生成代码的存储过程。对于源表中的每个字符列(SP 的参数),我需要调用一个删除垃圾字符的函数。我想在实用程序数据库中创建该 SP,并支持跨多个其他数据库创建视图。
解决方案
- 对于所有数据库:select * from sys.databases
- 对于所有表:从 INFORMATION_SCHEMA.TABLES 中选择 * 其中 TABLE_TYPE ='BASE TABLE'
- 从所有视图中选择 * from INFORMATION_SCHEMA.TABLES where TABLE_TYPE ='VIEW'
- 来自所有列:从 INFORMATION_SCHEMA.COLUMNS 中选择 * 请使用 table_name 作为过滤器。
- 在 INFORMATION_SCHEMA.COLUMNS 表中,您将获得列类型的 DATA_TYPE
首先从 SQL server 数据库加载数据库,然后获取数据库名称并连接到该数据库,然后使用上面的所有查询来获取您需要的内容。
推荐阅读
- firebase - 如何在 Flutter 中调试 Firestore 安全规则
- wpf - 分组和虚拟化时WPF DataGrid调整大小问题
- python - 将时间戳从 Dataframe 加载到 BigQuery 数据集
- postgresql - postgres 中的索引元组最大大小是多少?
- sql-server - 并行执行 SQL 命令的选项
- javascript - JavaScript 先将 markdown 拆分为标题,然后拆分为句子
- javascript - parceljs bundler 无法处理 javascript 模板字符串中的 svg src
- pdf - 从头生成PDF,字形如何映射到字符代码?
- angular - 如何在 Angular 中测试条件?
- ruby-on-rails - 如果在rails参数中传递%,如何防止参数引发错误