Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 查找非';t已使用(具有所有空值)_Sql Server 2005 - Fatal编程技术网

Sql server 2005 查找非';t已使用(具有所有空值)

Sql server 2005 查找非';t已使用(具有所有空值),sql-server-2005,Sql Server 2005,我继承了一个遗留数据库,许多字段不再被使用。我可以通过查询过去几年的数据并查看哪些字段为空来判断,至少可以得到一个我可以查看的基线 是否有一种优雅的方法可以确定数据库中的哪些字段对于给定集合中的所有记录都为空?这就是您需要的吗 SELECT count(*) FROM table WHERE field IS NULL 当然了 SELECT SUM(CASE WHEN field IS NULL THEN 1 ELSE 0 END) AS [field is null count

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

是否有一种优雅的方法可以确定数据库中的哪些字段对于给定集合中的所有记录都为空?

这就是您需要的吗

  SELECT count(*)
  FROM table
  WHERE field IS NULL
当然了

 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的模板:

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;
这是你需要的吗

  SELECT count(*)
  FROM table
  WHERE field IS NULL
当然了

 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的模板:

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;
输出为0的任何列都具有所有空值(除非Total_Count列也输出为0,在这种情况下,表为空)。请注意,在大型表上执行此查询将非常昂贵


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

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

SELECT COUNT(*)
FROM Table1
WHERE COALESCE (Field1, Field2, etc) IS NULL

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

SELECT COUNT(*)
FROM Table1
WHERE COALESCE (Field1, Field2, etc) IS NULL

表中的每个字段都需要它。未使用的字段在整个集合中都将具有空值。@Caveatrob是否将字段(列)与行混淆?“跨集合”是什么意思?好的,我也添加了一个例子。我需要表中每个字段都有这个例子。未使用的字段在整个集合中都将具有空值。@Caveatrob是否将字段(列)与行混淆?“跨越集合”是什么意思?好吧,我也添加了一个例子。+1,好吧,这比我的答案好,但我仍然喜欢sum(case..)给出实际数字。@Hogan你认为
COUNT(column)
没有给出实际数字吗?我只提到0,因为任何返回非零的数字都与数字无关。但这是正确的数字;请试一试。你知道我说的“实际空数”是什么意思。我偷了你的模板并把它编码在我的答案中DAlso,这是2008年的代码,因为2005年在
DECLARE
@Hogan中的赋值时犹豫不决。您的答案适用于
COUNT
不适用的不推荐的大型对象数据类型。我会在查询中添加
,并且也是_nullable=1
。+1,好的,所以这比我的答案好,但我仍然喜欢sum(case..)来给出实际的数字。@Hogan你认为
COUNT(column)
没有给出实际的数字吗?我只提到0,因为任何返回非零的数字都与数字无关。但这是正确的数字;请试一试。你知道我说的“实际空数”是什么意思。我偷了你的模板并把它编码在我的答案中DAlso,这是2008年的代码,因为2005年在
DECLARE
@Hogan中的赋值时犹豫不决。您的答案适用于
COUNT
不适用的不推荐的大型对象数据类型。我会在查询中添加
,并且也是_nullable=1