10

我有一个带有一个 XML 列的表。我想过滤掉 XML 中特定属性与字符串匹配的行,基本上是在执行 WHERE 或 HAVING。

桌子看起来像这样

| id | xml |

和 XML 类似的东西

<xml>
  <info name="Foo">
    <data .../>
  </info>
<xml>

我想获取 @name 属性与值匹配的所有 id。

我已经能够做到以下几点:

SELECT id, xml.query('data(/xml/info/@name)') as Value
FROM Table1
WHERE CAST(xml.query('data(/xml/info/@name)') as varchar(1024)) = @match

但这非常慢。

必须有更好的过滤查询输出的方法。

4

1 回答 1

22

找到了。而不是使用 query() 我应该使用exists()

我的查询将是

SELECT id, xml.query('data(/xml/info/@name)') as Value
FROM Table1
WHERE xml.exist('/xml/info/[@name=sql:variable("@match")]') = 1
于 2009-11-13T15:59:23.297 回答