Sql 检查空xml列

Sql 检查空xml列,sql,sql-server,database,Sql,Sql Server,Database,下一个查询成功运行: select top(100) * from PackageSessionNodes where Cast(ContentInteractions as nvarchar) != '' 接下来给我一个错误 目标字符串大小太小,无法表示XML实例 update PackageSessionNodes set ContentInteractions = '<contentinteractions />' where Cast(ContentInteraction

下一个查询成功运行:

select top(100) * from PackageSessionNodes 
where Cast(ContentInteractions as nvarchar) != ''
接下来给我一个错误 目标字符串大小太小,无法表示XML实例

update PackageSessionNodes set ContentInteractions = '<contentinteractions />'
where Cast(ContentInteractions as nvarchar) = ''
update PackageSessionNodes set-ContentInteractions=''
where Cast(作为nvarchar的内容交互)=”
ContentInteractions是一个xml列。未在其上定义滴滴涕

如何解决第二个查询,以便以xml的形式获取那些带有“”的记录


我觉得SqlServer无法处理存储在xml列中的空值。。。但是你可以插入它们。。。怎么样?

问题在于你的演员阵容。如果不指定nvarchar的长度,则在CAST函数中默认为30个字符。那么你的声明真正说的是

update PackageSessionNodes set ContentInteractions = '<contentinteractions />'
where Cast(ContentInteractions as nvarchar(30)) = ''
update PackageSessionNodes set-ContentInteractions=''
其中Cast(作为nvarchar(30))为“”

因此,如果ContentInteractions的XML内容被序列化为超过30个字符,就会出现这个问题

问题在于你的演员阵容。如果不指定nvarchar的长度,则在CAST函数中默认为30个字符。那么你的声明真正说的是

update PackageSessionNodes set ContentInteractions = '<contentinteractions />'
where Cast(ContentInteractions as nvarchar(30)) = ''
update PackageSessionNodes set-ContentInteractions=''
其中Cast(作为nvarchar(30))为“”
因此,如果ContentInteractions的XML内容被序列化为超过30个字符,就会出现这个问题