首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查找未使用的字段(全部为空)

查找未使用的字段(全部为空)
EN

Stack Overflow用户
提问于 2012-07-10 05:44:07
回答 3查看 180关注 0票数 0

我继承了一个遗留数据库,很多很多字段不再被使用。我可以通过查询过去几年并查看哪些字段为空来判断,以便至少获得我可能查找的基准。

对于给定集合中的所有记录,有没有一种很好的方法来判断数据库中的哪些字段为空?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-10 05:57:44

代码语言:javascript
运行
复制
DECLARE @table NVARCHAR(512);
SET @table = N'dbo.tablename';

DECLARE @sql NVARCHAR(MAX);

SELECT @sql = N'';

SELECT @sql = @sql + QUOTENAME(name) 
     + ' = SUM(CASE WHEN ' + QUOTENAME(name) + ' IS NULL THEN 1 ELSE 0 END),'
  FROM sys.columns
  WHERE object_id = OBJECT_ID(@table)
  AND is_nullable = 1;

SELECT @sql = 'SELECT ' + @sql + ' Total_Count = COUNT(*)
  FROM ' + @table + ';';

EXEC sp_executesql @sql;

所有输出为0的列都为空值(除非Total_Count列也输出为0,在这种情况下,表为空)。请注意,此查询在大表上的开销非常大。

票数 4
EN

Stack Overflow用户

发布于 2012-07-10 05:46:04

这是你需要的吗?

代码语言:javascript
运行
复制
  SELECT count(*)
  FROM table
  WHERE field IS NULL

当然也可以

代码语言:javascript
运行
复制
 SELECT SUM(CASE WHEN field IS NULL THEN 1 ELSE 0 END) AS [field is null count]
        COUNT(*) as [total count]
 FROM table

同样有效,您可以一次为一堆字段执行此操作。

窃取Aaron Bertrand的模板:

代码语言:javascript
运行
复制
DECLARE @tableName NVARCHAR(512)

SET @tableName = N'dbo.tablename';

DECLARE @sql NVARCHAR(MAX);

SELECT @sql = N'';

SELECT @sql = @sql + N' SUM(CASE WHEN ' + QUOTENAME(name) + ' IS NULL THEN 1 ELSE 0 END) AS ['+name+' null count], '
FROM sys.columns
WHERE object_id = OBJECT_ID(@tableName) AND is_nullable = 1;

SELECT @sql = 'SELECT ' + @sql + ' Total_Count = COUNT(*)
FROM ' + @tableName + ';';

EXEC sp_executesql @sql;
票数 1
EN

Stack Overflow用户

发布于 2012-07-10 06:01:54

这将为您提供包含空字段的所有记录的计数,您可以将该计数与所有记录的计数进行比较

代码语言:javascript
运行
复制
SELECT COUNT(*)
FROM Table1
WHERE COALESCE (Field1, Field2, etc) IS NULL
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11403665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档