【发布时间】:2014-06-26 05:39:15
【问题描述】:
我们的一位客户想要检查每个表中的每个数据库记录。 问题是,我们的数据库目前有几十张表(50多张),每张表已经有上千条记录了。
我们的客户想要做的基本检查是检查每个表的哪些列具有空值。我们的客户假设如果平台用户只填写基本输入,这可能意味着用户没有充分利用平台中的可用输入。
满足此要求的最佳方法是什么?
我已经考虑过在统计上这样做:
- Table1 有 30 条记录,其中包含以下空列(Column1、Column2、Column3)
- 30 % 的数据库表有空值记录
【问题讨论】:
-
SQL Server? MySq?甲骨文?我知道我会如何为 SQL Server 做这件事,但这可能不适用于其他数据库。我首先查询架构表以查找可以包含空值的列(使用这样的查询:mssqltips.com/sqlservertip/1781/…),然后为这些列动态构建查询,返回计数。
-
感谢 David 的回复,是一个 SQL Server 2008 R2 数据库。所以在某种程度上你会检索聚合数据吗?
-
客套话建议:对于允许空值的每一列,尝试使用 ALTER TABLE 来禁止空值。如果失败,则表中该列中存在空值。如果成功,则该列中没有空值(将来也不会有空值)。
-
是的。我会编写一个应用程序,首先查询查找现在可以包含的列,然后对于找到的每一列,创建一个查询,如 Select Count(*) From [Table] WHERE [column] IS NULL,并记录表。计数> 0的列。但是,这可能不是最有效的方法,所以我在等待更聪明的人回答。
-
你知道,@JonathanLeffler,如果我知道我不应该有空值并且正在执行清理,那实际上我会这样做。我会先在数据库的测试版本上做,但这将是最简单的 IMO。
标签: sql for-loop sql-server-2008-r2 null