如何获取其中一个添加键字段的值(SQL Server 2012)

时间:2017-05-10 21:29:16

标签: xml tsql sql-server-2012

我正在尝试使用SQL语句获取其中一个添加键节点的值。 像

这样的东西
SELECT ColXML from table where value = 'Tom'

我只希望具有此值的行与其他行包含相同的XML但具有不同的值。 表是 ID,colXML,Createtime colXML列也是VARCHAR。

<?xml version="1.0" encoding="utf-8"?>
<appSettings>
     <add key="1" Value="John">
     <add key="2" Value="Tom">
     <add key="3" Value="Eric">
     <add key="4" Value="Jane">
     <add key="5" Value="Sarra">
     <add key="6" Value="Suzie">
     <add key="7" Value="Rick">
     <add key="8" Value="Jim">
</appSettings>

1 个答案:

答案 0 :(得分:2)

如果您将XML存储在列中,其数据类型应真正XML - 而不是varchar ....

如果您确实该列为XML,那么您可以执行以下操作:

SELECT *
FROM dbo.YourTable
WHERE ColXml.exist('/appSettings/add[@Value="Tom"]') = 1

通过此操作,您基本上会检查是否存在一个具有<add>属性的条目Value="Tom" - 如果存在,您将从数据库表中选择该行。

使用varchar列,您可能需要使用

WHERE CAST(ColXml AS XML).exist('/appSettings/add[@Value="Tom"]') = 1

为了获得XML值,以便可以应用XQuery .exist()方法 - 但同样:您应该真正将该列转换为XML