我最近大约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
指令。
答案 0 :(得分:1)
构建XML并检查空的节点值。比检查null更简单并且如注释中所述,只有(n)varchar产生一个空字符串作为节点值。
select *
from T
where (
select T.*
for xml path(''), type
).exist('*/text()[. = ""]') = 1