sql - 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
如何编写此查询?
解决方案
这可能对您有用...列出所有具有“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 列的表
推荐阅读
- go - 通过 import 生成基于 protobuf 的 go 文件
- asp.net-core - Asp.NET CORE:如何增加特定动作/控制器的请求超时
- c# - Asp.net核心登录身份模板使用安全吗?
- java - 有没有办法每 x 秒刷新一次 webView?
- php - 从 laravel auth 注销时出现错误
- nosql - 不知道对象键的 Cosmos DB 查询
- css - 如何为所有动画的子元素设置不同的动画延迟?
- python - 在行中查找带有时间戳的持续时间和列元素的总和,直到行中的某个 order_id(python)
- php - 获取日期值时,字段“日期”没有默认值
- django - 如何在 Django 模板中处理动态添加的变量