我有一个包含一个XML列的表.我想过滤掉XML中特定属性与字符串匹配的行,基本上是执行WHERE或HAVING.
该表看起来像这样
| id | xml |
Run Code Online (Sandbox Code Playgroud)
和XML类似的东西
<xml>
<info name="Foo">
<data .../>
</info>
<xml>
Run Code Online (Sandbox Code Playgroud)
我想得到@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
Run Code Online (Sandbox Code Playgroud)
但它非常缓慢.
必须有一种更好的方法来过滤查询的输出.
Mat*_*son 21
找到了.我应该使用exists()而不是使用query ().
那我的查询就是
SELECT id, xml.query('data(/xml/info/@name)') as Value
FROM Table1
WHERE xml.exist('/xml/info/[@name=sql:variable("@match")]') = 1
Run Code Online (Sandbox Code Playgroud)