首页 > 解决方案 > ms sql server如何检查表是否有“id”列并在“id”存在时计算行数

问题描述

我的 SQL Server 数据库中有太多表。他们中的大多数都有一个“id”列,但有些没有。我想知道哪些表没有“id”列,如果存在“id”列,则计算 id=null 的行。查询结果可能如下所示:

TABLE_NAME |  HAS_ID |  ID_NULL_COUNT | ID_NOT_NULL_COUNT
  table1   |  false  |     0          |    0
  table2   |  true   |    10          |    100

如何编写此查询?

标签: sqlsql-server

解决方案


这可能对您有用...列出所有具有“id”列的表的行数。它过滤掉以“sys”开头的表,因为这些表大多是内部表。如果您有一个以“sys”开头的表,您可能希望删除 WHERE 子句的那部分。

SELECT DISTINCT OBJECT_NAME(r.[object_id]) AS [TableName], [row_count] AS [RowCount]
FROM sys.dm_db_partition_stats r
WHERE index_id = 1
  AND EXISTS (SELECT 1 FROM sys.columns c WHERE c.[object_id] = r.[object_id] AND c.[name] = N'id')
  AND OBJECT_NAME(r.[object_id]) NOT LIKE 'sys%'
ORDER BY [TableName] 

请注意,您可以将“c.[name] = N'id'”更改为任何列名,甚至可以将“=”更改为“<>”以仅查找没有 id 列的表


推荐阅读