检查表中是否有任何字段为空值

时间:2014-07-25 13:26:22

标签: tsql sql-server-2012 xquery

我最近大约2个月前需要检查表中具有NULL值的任何字段。

我现在正处理另一项任务,但这次我需要检查表中的任何字段是否有空字符串值。

开始查询:

;With xmlnamespaces('http://www.w3.org/2001/XMLSchema-instance' as ns)
SELECT *
FROM [Schema].[Table] act
where (
    select act.*
    for xml path('row'), elements xsinil, type
).exist('//*/@ns:nil') = 1

我知道我需要更改@ns:nil但由于我没有接受过TSql的XQuery实现,我需要有人来帮我解决这个初始查询。同样,我应该去MSDN以外阅读使用和功能。

更新#1:

;With xmlnamespaces('http://www.w3.org/2001/XMLSchema-instance' as ns)
Select *
from Schema.Table act
where (
    select act.*
    for xml path('row'), elements xsinil, type
).value('(//row/*)[1]', 'varchar(max)') = ''

试过这个,但显然其中一个字段包含字符0x001C,因此需要转换为二进制,varbinary或image,然后使用BINARY BASE64指令。

1 个答案:

答案 0 :(得分:1)

构建XML并检查空的节点值。比检查null更简单并且如注释中所述,只有(n)varchar产生一个空字符串作为节点值。

select *
from T
where (
      select T.*
      for xml path(''), type
      ).exist('*/text()[. = ""]') = 1