假设我有一个表数据如下:
我想选择包含节点Value
的所有Name="Hello World"
(XML数据)。我怎样才能实现它?
set @f = @XML.exist('/ArrayOfFilterColumn/SelectColumn[(@Name) eq "Hello World"]');
select @f;
我不知道怎么能把它添加到我的地方,所以我把它放在一个小提琴里。
答案 0 :(得分:8)
在查询表时,跳过XML变量的使用并将exists放在where子句中。
select F.Value
from XML_FILES as F
where F.Value.exist('/ArrayOfArrayOfSelectColumn/SelectColumn[@Name eq "Hello World"]') = 1
您的专栏显然是text
,因此您需要对其进行更改,因为text
已被弃用并且已经使用了很长时间。
ntext, text, and image (Transact-SQL)
将来的版本中将删除ntext,text和image数据类型 Microsoft SQL Server。避免在新的中使用这些数据类型 开发工作,并计划修改当前使用的应用程序 他们。请改用nvarchar(max),varchar(max)和varbinary(max)。
在您的情况下,您当然应该更改为XML。
在您修复之前,您可以在查询中强制转换为XML。
select F.Value
from XML_FILES as F
where cast(F.Value as xml).exist('/ArrayOfArrayOfSelectColumn/SelectColumn[@Name eq "Hello World"]') = 1