可以使用参数来匹配SQL Server中的XML命名空间吗?

时间:2014-03-06 21:54:08

标签: sql-server xml

XML:

<ZZZ:PRODUCT xmlns:ZZZ="123"><ZZZ:CONTENT>Blank</ZZZ:CONTENT>/ZZZ:PRODUCT>

ZZZ将根据实体而变化。如何在SQL中传递参数并仅返回匹配的参数?以下是我的想法,并希望将@Entity参数添加到。

SQL:

@Entity varchar(10)

SELECT * FROM Products

WHERE Products.productDetailXML.exist('//ZZZ:PRODUCT') = 1

1 个答案:

答案 0 :(得分:0)

我不确定我明白你想要什么,但无论如何我都会提供答案。

您不必处理名称空间前缀不同的情况。执行查询时,名称空间很重要。您拥有的查询不起作用,因为您尚未指定前缀ZZZ所属的命名空间。

此查询将为您提供使用命名空间123的所有行。

WITH XMLNAMESPACES('123' as ns)
SELECT * 
FROM Products
WHERE Products.productDetailXML.exist('//ns:PRODUCT') = 1

前缀是ZZZ

并不重要
<ZZZ:PRODUCT xmlns:ZZZ="123">
  <ZZZ:CONTENT>Blank</ZZZ:CONTENT>
</ZZZ:PRODUCT>

或其他完全类似A的内容。

<A:PRODUCT xmlns:A="123">
  <A:CONTENT>Blank</A:CONTENT>
</A:PRODUCT>

您仍将获得使用命名空间123的行。

SQL Fiddle