1
最近,大约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
但正如我在T-SQL的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或图像,然后使用BINARY BASE64
指令。
我需要搜索的列是VarChar字段。事实上XQuery会更快,因为有些表只有7个字段,而其他的字段有50多个字段。因此,我需要“相对”轻松地遍历各个表,然后找出哪些表中有空值,因此我知道将哪些转换为NULL。 – GoldBishop
你的意思是表中的每一列都是一个varchar列,或者你只想检查一下varchar列吗?我不认为XQuery版本更快。更快输入yes。执行速度并不快。也许你应该看看动态地创建where子句,以便你的代码可以重复使用多个表? –
最好只检查varchar字段。但是,如果值类型不符合字符串,将不会空()返回NULL而不是0或1。 – GoldBishop