如何为 XML 类型编写此 SQL 查询?

Max*_*mus 6 xml sql-server sql-server-2012

我正在使用 SQL Server 2012,其中有一个表[abc],其中有一个名为[Information][XML] 类型的列。

此列具有以下值 -

<Information>
  <Groups>
    <Group Name="Monitor">
      <Items>
        <Item>
          <Name>Cid</Name>
          <Value>2323232323</Value>
        </Item>
        <Item>
          <Name>Tid</Name>
          <Value>6656565656</Value>
        </Item>
      </Items>
    </Group>
  </Groups>
</Information>
Run Code Online (Sandbox Code Playgroud)

如何编写可以查询此列并进一步提取值的 SQL 查询[Tid]

Mik*_*son 10

从你的问题来看,你在这里想要什么并不完全清楚。我的猜测是您想要<Value>节点所在<Name>节点的值Tid

使用nodes()on 函数粉碎 XML/Information/Groups/Group/Items/Item并添加谓词[Name/text()="Tid"]以检查 的值<Name>

declare @T table(X xml not null);
insert into @T(X) values
('<Information>
  <Groups>
    <Group Name="Monitor">
      <Items>
        <Item>
          <Name>Cid</Name>
          <Value>2323232323</Value>
        </Item>
        <Item>
          <Name>Tid</Name>
          <Value>6656565656</Value>
        </Item>
      </Items>
    </Group>
  </Groups>
</Information>');

select I.X.value('(Value/text())[1]', 'bigint') as Value
from @T as T
  cross apply T.X.nodes('/Information/Groups/Group/Items/Item[Name/text()="Tid"]') as I(X);
Run Code Online (Sandbox Code Playgroud)


Eri*_*ing 8

如果您只需要<Name>Tid</Name>,您的查询将如下所示:

DECLARE @x XML = N'
<Information>
  <Groups>
    <Group Name="Monitor">
      <Items>
        <Item>
          <Name>Cid</Name>
          <Value>2323232323</Value>
        </Item>
        <Item>
          <Name>Tid</Name>
          <Value>6656565656</Value>
        </Item>
      </Items>
    </Group>
  </Groups>
</Information>
';

DECLARE @x_table TABLE (x XML);
INSERT @x_table ( x )
VALUES ( @x );

SELECT      ca.c.value('.', 'NVARCHAR(3)')
FROM        @x_table AS x
CROSS APPLY x.x.nodes('/Information/Groups/Group/Items/Item/Name/text()') AS ca(c)
WHERE       ca.c.exist('. [.="Tid"]') = 1;
Run Code Online (Sandbox Code Playgroud)

如果您需要其他东西,请告诉我。