sql - 如何在 Server SQL 中正确列出此特定结构的所有表
问题描述
我有这个结构:
-Server
-Databases
-System Databases <- I do not want this
- master
- model
- msdv
- tempdb
-Database Snapshots <- Neither this
-DB1 (a database) <- I want the info in here
- Databases Diagrams
- Tables <- Name of tables, size and rows
- Views
- etc...
-DB2 <- and here
-etc.. <- and All of that
我想列出所有这些 DB1、DB2... 中的所有表,以收集诸如 table_name、行数、大小等信息。
我最初尝试过这个:
SELECT
d.name
,d.create_date
FROM
sys.databases d
WHERE
d.name NOT IN ('master', 'tempdb', 'model', 'msdb')
现在列出了我的数据库(DB1,DB2 ...)...
例如,如果我想要单个数据库的表,我会这样做:
SELECT
*
FROM
DB1.INFORMATION_SCHEMA.tables
它会列出它们,但是对于每个数据库,我如何获得以下信息?
- 表的名称
- 行数
- 尺寸
我目前遇到的问题是我的查询仅在系统数据库上获取,我不知道如何执行上述操作
解决方案
DECLARE @Tables TABLE (
DatabaseName sysname,
SchemaName sysname,
TableName sysname
);
INSERT INTO @Tables (DatabaseName, SchemaName, TableName)
EXEC sp_msforeachdb 'select ''?'', s.name, t.name from [?].sys.tables t inner join [?].sys.schemas s on t.schema_id = s.schema_id';
SELECT
*
FROM
@Tables t
WHERE
t.DatabaseName NOT IN ('master', 'tempdb', 'model', 'msdb')
这得到了我想要的结果,即:
DB1 - dbo - tableName1
DB1 - dbo - tableName2
...
DB2 - dbo - tableName1
等等服务器中的每个表
谢谢大家的时间
推荐阅读
- sas - 保留具有特定格式的列
- java - 将标签和文本字段放在同一行
- python - 无法更改 GTK 按钮的属性
- gridview - Flutter GridView 导致 Navigator.push 错误
- mysql - MySQL 5.5 - 用上面的值填补空白
- python - 在 Holoviews 中结合 Pointdraw 和 Sample
- javascript - 用 Jest 模拟文件
- nativescript - 什么是Repeater.itemsLayout 属性?如何以及在什么情况下使用它?
- asp.net - 在 ASP.Net WebForms 中显示图像的内部服务器错误
- jsf - JSF / Liferay 6.2 多次包含 Javascript 文件