如何检查所有当前行的列是空的还是空白('')?

时间:2018-05-18 07:31:08

标签: sql tsql

我有一张包含100多个免费字段的表格。我想创建一个脚本来检查列是否为null或为存在的所有行都为空。

我该怎么做?我希望之后使其成为动态,因此它可以为每个列执行此操作,并将列名插入临时表中以显示哪些可用。

1 个答案:

答案 0 :(得分:1)

如果我做对了,你想检查给定列中所有行是空还是空。它不应该报告一个列,其中只有一些 null或空字段?

您可以使用NOT EXISTS。检查是否存在行,其中列为空而不为空。

SELECT '<column_name>' column_name
       WHERE NOT EXITS (SELECT *
                               FROM elbat
                               WHERE isnull(<column_name>, '') <> '');

如果你想计算只包含空格的列,除了在检查与空字符串相等之前去除空格之外,还要使用rtrim()

SELECT '<column_name>' column_name
       WHERE NOT EXITS (SELECT *
                               FROM elbat
                               WHERE rtrim(isnull(<column_name>, '')) <> '');

<column_name>替换为您的实际列名。

要将其重用于多个列名,您必须使用动态SQL。将查询构建为nvarchar,在正确的位置插入所需的列名称,并使用EXECUTEsp_executesql执行。

您可以从目录中获取表格的列名。

SELECT c.name
       FROM sys.columns c
            INNER JOIN sys.tables t
                       ON t.object_id = c.object_id
            INNER JOIN sys.schemas s
                       ON s.schema_id = t.schema_id
       WHERE s.name = '<schema_name>'
             AND t.name = '<table_name>';

<schema_name>替换为您的架构名称,将<table_name>替换为您的表名。

使用cursor循环目录中的结果。