Найти значение из XML данных на SQL сервере? - PullRequest
0 голосов
/ 29 января 2020

Я хочу найти значение из XML данных в SQL Таблице сервера.

Ниже приведен мой пример xmldata;

<wddxPacket version="1.0">
   <header />
   <data>
      <struct type="xyz">
         <var name="TXRGHC43">
            <string />
         </var>
         <var name="TWBS1">
             <string>9011750</string>
         </var>
         <var name="PMNAMEID">
            <string>2323443</string>
         </var>

         <var name="EDATE36">
            <string />
         </var>

         <var name="TWBSDESC40">
            <string />
         </var>

      </struct>
   </data>
</wddxPacket>

Я ищу 9011750 под TWBS1 . не могли бы вы помочь мне в этом. как найти значение 9011750 .

Я пытаюсь выполнить следующие запросы, но я не получил никакого вывода.

select
  col
from
  xyz
where
  col.value('(/wddxPacket/data/struct/var[TWBS1])[2]', 'varchar(max)') like '9011750'

SELECT col.value('(/wddxPacket/data/struct/var/string)[3]', 'varchar(100)')
FROM   xyz

мое требование заключается в поиске данных целиком таблица, это только пример xml данных.

1 Ответ

0 голосов
/ 29 января 2020

Пожалуйста, попробуйте следующее SQL. В нем показано, как использовать предикат в выражении XPath для имитации предложения WHERE.

SQL

-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, xmldata XML);
INSERT INTO @tbl (xmldata)
VALUES
(N'<wddxPacket version="1.0">
    <header/>
    <data>
        <struct type="xyz">
            <var name="TXRGHC43">
                <string/>
            </var>
            <var name="TWBS1">
                <string>9011750</string>
            </var>
            <var name="PMNAMEID">
                <string>2323443</string>
            </var>
            <var name="EDATE36">
                <string/>
            </var>
            <var name="TWBSDESC40">
                <string/>
            </var>
        </struct>
    </data>
</wddxPacket>');
-- DDL and sample data population, end

DECLARE @varName VARCHAR(20) = 'TWBS1';

SELECT c.value('(./text())[1]','INT') AS [string_value]
FROM @tbl AS tbl
    CROSS APPLY tbl.xmldata.nodes('/wddxPacket/data/struct/var[@name=sql:variable("@varName")]/string') AS t(c);

Вывод

+--------------+
| string_value |
+--------------+
|      9011750 |
+--------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...