ste*_*erz 0 sql t-sql sql-server ssms
我有访问大型MSSQL DB的权限。该数据库有很多表,但是其中很大一部分是空的。如何查询数据库模式以选择表名(存在任何行)?(实现此功能后,我只想从具有一些数据的这些表中创建ERD)。我没有发现任何相关问题。
您可以使用以下快速但近似的查询,只需检查一下该RowCount列即可:
SELECT
TableName = t.NAME,
SchemaName = s.Name,
[RowCount] = p.rows,
TotalSpaceMB = CONVERT(DECIMAL(18,2), SUM(a.total_pages) * 8 / 1024.0),
UsedSpaceMB = CONVERT(DECIMAL(18,2), SUM(a.used_pages) * 8 / 1024.0),
UnusedSpaceMB = CONVERT(DECIMAL(18,2), (SUM(a.total_pages) - SUM(a.used_pages)) * 8 / 1024.0)
FROM
sys.tables t
INNER JOIN sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN sys.allocation_units a ON p.partition_id = a.container_id
LEFT OUTER JOIN sys.schemas s ON t.schema_id = s.schema_id
WHERE
t.NAME NOT LIKE 'dt%'
AND t.is_ms_shipped = 0
AND i.OBJECT_ID > 255
GROUP BY
t.Name,
s.Name,
p.Rows
ORDER BY
[RowCount] DESC
Run Code Online (Sandbox Code Playgroud)
如果您想要真实的计数,则必须发出一个SELECT返回脚本,该脚本包含多个SELECT,COUNT(*)可能带有一堆UNION ALL。如果同时访问表或表很大,则可能需要很长时间才能完成。
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |