SQL:查找XML节点是否存在

Gun*_*.IO 6 sql t-sql sql-server sqlxml

假设我有一个表格数据如下:样本表

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

SQL小提琴

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

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

Mik*_*son 8

跳过XML变量的使用,并在查询表时将exists放在where子句中.

select F.Value
from XML_FILES as F
where F.Value.exist('/ArrayOfArrayOfSelectColumn/SelectColumn[@Name eq "Hello World"]') = 1
Run Code Online (Sandbox Code Playgroud)

您的专栏显然text是因为您需要更改它,因为text已弃用且已经有一段时间了.

ntext,text和image(Transact-SQL)

将来的Microsoft SQL Server版本中将删除ntext,text和image数据类型.避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序.请改用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
Run Code Online (Sandbox Code Playgroud)