【发布时间】:2021-09-07 07:55:39
【问题描述】:
我想查找行数最多的表,并排除具有 bigint 主键的表。
下面的查询运行得非常快并且似乎可以正常工作,但是如何修改它以过滤掉 bigint 表?我也许可以忽略大于 MAX_INT 的 row_counts,但如果表是 bigint 但还没有很多行,那将不起作用。
SELECT SCHEMA_NAME(O.schema_id) + '.' +
O.Name As [Schema.TableName], SUM(P.rows) AS 'Total_RowCount'
FROM sys.objects O
INNER JOIN sys.partitions P ON O.object_id = P.object_id
WHERE O.type = 'U'
AND P.index_id<2
GROUP BY O.schema_id, O.Name
order by Total_RowCount desc
【问题讨论】:
-
这列出了所有数据类型为 bigint
select * from INFORMATION_SCHEMA.COLUMNS where DATA_TYPE = 'bigint'的列 -
OP 最好使用其他
sys对象,因为它们已经在使用sys对象。此外,这只会省略一个表,其中 any 列是bigint,而不是主键 @Nick.McDermaid。 -
正确。如果我有一个完整的解决方案(我很少这样做),我会发布作为答案。是的,始终坚持使用老式(sys)或现代(信息模式)API 是有意义的
-
@Nick.McDermaid
sys对于 SQL Server 来说更现代,而不是INFORMATION_SCHEMA... 后者省略了很多关于对象的信息。
标签: sql-server tsql