如何查询XML字段数据中的特定标签sql?

How to query a specific tag from XML field data in sql?

我有一个名为 Payloadxml 字段。它有这样的数据:

<FL>
    <Head>
      <TP>Nine11</TP>
      <RB>Test</RB>
    </Head>
<FL>

现在我想从 Head 查询 RB,它的值等于例如'测试。

我做了这个,但除此之外我想不通了。

Select  rlogs.PayLoadfrom rlogs

它显示了,我尝试连投。

Select CAST(rlogs.PayLoad as text) from RecordLogs rlogs

您可以在 XML 中使用 XPath 进行查询。如果我正确理解你的问题,你可以(例如)从你的 RecordLogs table 查询 TP 或整个 XML,然后像这样过滤 TP 列:

Select rlogs.PayLoadFrom.value('(/FL/Head/TP)[1]', 'varchar(50)') TP, 
     CAST(rlogs.PayLoadFrom AS text) FL
FROM RecordLogs rlogs
WHERE rlogs.PayLoadFrom.value('(/FL/Head/RB)[1]', 'varchar(50)') = 'Test'

在等待您的回复期间,这里有一个基于一些假设的答案。

顺便说一下,您的 XML 格式不正确。我必须修复它。

SQL

-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, payload XML);
INSERT INTO @tbl (payload)
VALUES
(N'<FL>
    <Head>
      <TP>Nine11</TP>
      <RB>Test</RB>
    </Head>
</FL>');
-- DDL and sample data population, end

DECLARE @rb VARCHAR(20) = 'Test';

SELECT c.value('(TP/text())[1]', 'VARCHAR(30)') AS tp 
    , c.value('(RB/text())[1]', 'VARCHAR(30)') AS rb
FROM @tbl AS tbl
    CROSS APPLY tbl.payload.nodes('/FL/Head[RB=sql:variable("@rb")]') AS t(c);

Output

+--------+------+
|   tp   |  rb  |
+--------+------+
| Nine11 | Test |
+--------+------+