遇到一个令人抓狂的问题,希望大家帮帮忙:
用的是sqlserver2012,有一个表字段类型为xml,然后用这种方式读取:
select field.value('(//tag[@name="abc"]/@value)[1]','int')
from tb
where ....
表内xml数据如下:
<root>
<tag name="msg" value="你好" />
<tag name="abc" value="1000" />
<tag name="cde" value="10" />
<tag name="efg" value="100" />
</root>
即,根据xml元素属性值查询该元素另一个属性的值。
现在遇到的问题是,直接从字段进行查询,会报类型转换错误,而且始终是报:
在将nvarchar数据"你好"转换为int时失败
但是如果改为这样操作:
declare @v xml;
select @v=field from tb where ...
select @v.value('(//tag[@name="abc"]/@value)[1]','int');
则完全不会报错而且正确能取到值。
目前完全没有思绪,不知道到底哪里出错……试了换库、重建表、重新写入xml,都不行。
希望大家有以教我,谢谢!
明明就是字串,為什麼你要指定INT 型別