考虑到这个简单的表id (int), name (varchar), customFields (xml)
customFields 包含 C# 字典的 XML 表示形式。例如:
<dictionary>
<item>
<key><int>1</int></key>
<value><string>Audi</string></value>
</item>
<item>
<key><int>2</int></key>
<value><string>Red</string></value>
</item>
</dictionary>
如何选择包含 3 列的表的所有行:id、名称和 1 列,该列是string
标记的值int
等于 1 的标记内容。
最接近我设法得到的结果是:
SELECT id, name, C.value('(value/string/text())[1]', 'varchar(max)')
FROM myTable
OUTER APPLY customFields.nodes('/dictionary/item') N(C)
WHERE (customFields IS NULL OR C.value('(key/int/text())[1]', 'int') = 1)
问题是,如果 xml 没有标签 = 1,则根本不会返回该行(我仍然想在第三列中int
获得带有 id、name 和 name 的行)NULL