使用 T-SQL 解析 xml 数据

Parse xml data using T-SQL

DECLARE @xml xml 设置@xml = '<row Col1='abc' Col2='def' Col3='123' /> <row Col1='aaa' Col2='bbb' Col3='111'/>

我需要 SQL 查询来提取 Col1、Col2、Col3 值。我不知道该怎么做,因为数据不是传统格式,如下所示

<row> <col1>'abc'</col1> <col2>'def'</col2> <col3>'123'</col3> </row>

另外,很抱歉,由于邮件正文的格式问题,我很难发布详细信息。 Whosebug 对于初次使用和新编码的人来说并不简单。

MS SQL Server 2012 或更高版本。

谢谢。

请尝试以下解决方案。

未提供最小的可重现示例。所以,我从臀部射击。

SQL

-- DDL and sample data population, start
DECLARE @tbl TABLE  (ID INT IDENTITY PRIMARY KEY, xmldata XML);
INSERT INTO @tbl (xmldata) VALUES
('<row Col1="abc" Col2="def" Col3="123"/>'),
('<row Col1="aaa" Col2="bbb" Col3="111"/>');
-- DDL and sample data population, end

SELECT t.*
    , c.value('@Col1', 'VARCHAR(20)') AS Col1
    , c.value('@Col2', 'VARCHAR(20)') AS Col2
    , c.value('@Col3', 'INT') AS Col3
FROM @tbl AS t
CROSS APPLY xmldata.nodes('/row') AS t1(c);

输出

+----+------------------------------------------+------+------+------+
| ID |                 xmldata                  | Col1 | Col2 | Col3 |
+----+------------------------------------------+------+------+------+
|  1 | <row Col1="abc" Col2="def" Col3="123" /> | abc  | def  |  123 |
|  2 | <row Col1="aaa" Col2="bbb" Col3="111" /> | aaa  | bbb  |  111 |
+----+------------------------------------------+------+------+------+