SQL:查找XML节点是否存在

时间:2015-03-13 06:20:39

标签: sql sql-server tsql sqlxml

假设我有一个表数据如下:Sample Table

我想选择包含节点Value的所有Name="Hello World"(XML数据)。我怎样才能实现它?

SQL Fiddle

set @f = @XML.exist('/ArrayOfFilterColumn/SelectColumn[(@Name) eq "Hello World"]');
select @f;

我不知道怎么能把它添加到我的地方,所以我把它放在一个小提琴里。

1 个答案:

答案 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