这是XML模式:

<details schemaVersion="1">
  <dataWarning>
    <Locations>
      <Failed_to_Create LocationID="1234">Location<Location_Description>TEST</Location_Description><FacilityID>TEST</FacilityID><Active>Y</Active></Failed_to_Create>
    </Locations>
  </dataWarning>
</details>

如何解析XML,以便能够在存储过程中显示它?

谢谢!

enter code here

#1楼 票数:1

使用Xquery nodes()方法。 它允许访问任何元素或属性。

的SQL

DECLARE @xml XML = N'<Failed_to_Create LocationID="">Location
    <Location_Description>TEST</Location_Description>
    <FacilityID>TEST</FacilityID>
    <Active>Y</Active>
</Failed_to_Create>';

SELECT c.value('(./text())[1]', 'VARCHAR(10)') AS [location]
    , c.value('(Location_Description/text())[1]', 'VARCHAR(100)') AS [Location_Description]
    , c.value('(FacilityID/text())[1]', 'VARCHAR(100)') AS [FacilityID]
    , c.value('(Active/text())[1]', 'VARCHAR(100)') AS [Active]
FROM @xml.nodes('/Failed_to_Create') AS t(c);

输出量

+------------+----------------------+------------+--------+
|  location  | Location_Description | FacilityID | Active |
+------------+----------------------+------------+--------+
| Location   | TEST                 | TEST       | Y      |
+------------+----------------------+------------+--------+

#2楼 票数:1

安德里亚,你需要更有纪律。 提供DDL和样本数据填充是您的责任。

的SQL

-- DDL and sample data population, start
DECLARE @tbl TABLE  (ID INT IDENTITY(1,1) PRIMARY KEY, Details XML);
INSERT INTO @tbl (Details)
VALUES
(N'<details schemaVersion="1">
  <dataWarning>
    <Locations>
      <Failed_to_Create LocationID="1234">Location<Location_Description>TEST</Location_Description><FacilityID>TEST</FacilityID><Active>Y</Active></Failed_to_Create>
    </Locations>
  </dataWarning>
</details>')
, (N'<details schemaVersion="1">
  <dataWarning>
    <Locations>
      <Failed_to_Create LocationID="5678">Location<Location_Description>Real Description</Location_Description><FacilityID>770</FacilityID><Active>N</Active></Failed_to_Create>
    </Locations>
  </dataWarning>
</details>');
-- DDL and sample data population, end

SELECT c.value('@LocationID', 'VARCHAR(10)') AS [locationID]
    , c.value('(Location_Description/text())[1]', 'VARCHAR(100)') AS [Location_Description]
    , c.value('(FacilityID/text())[1]', 'VARCHAR(100)') AS [FacilityID]
    , c.value('(Active/text())[1]', 'VARCHAR(100)') AS [Active]
FROM @tbl AS tbl
      CROSS APPLY tbl.Details.nodes('/details/dataWarning/Locations/Failed_to_Create') AS t(c);

输出量

+------------+----------------------+------------+--------+
| locationID | Location_Description | FacilityID | Active |
+------------+----------------------+------------+--------+
|       1234 | TEST                 | TEST       | Y      |
|       5678 | Real Description     | 770        | N      |
+------------+----------------------+------------+--------+

  ask by Andrea translate from so

未解决问题?本站智能推荐:

1回复

SQL Server存储过程中的XML解析错误

我想在SQL Server存储过程中解析以下XML,并基于此XML更新一些表。 我已经使用OPENXML实现了相同的功能,但是现在XML的开头又增加了一行,因为这会出现意外错误。 解析时是否可能以某种方式单独跳过第一个标签 解析代码: XML在这里:
1回复

TSQL解析存储过程中的XML

我有4个表,其中包含各种数据。 表1包含问题表2包含组表3包含选项表4包含作业应用程序,其中包含“个人资料数据”列 概要文件数据已生成并转换为XML,并存储在表4的profileData列中。其格式如下: 现在,我正在创建一个页面,在该页面上需要使用所有选择的设置来重新创建作
2回复

SQL Server XML:SQL外部或SQL存储过程中的XML格式消息?

我已经阅读了一些处理SQL XML输出帖子的出色回答,尽管我所需要的可能不是a)在存储过程中最好做到的,b)在存储过程中不可能做到的。 我的问题是这样的: 我有一张简单的桌子; 为了示例的目的,col1,col2,col3,col4 ..它们都是varchar字段。 我正在尝
1回复

从存储过程中的 XML 输入参数创建查询并验证输出

我创建了一个读取 XML 数据作为其输入的存储过程。 我有两个问题,希望有人可以提供帮助。 问题 1:当我执行存储过程时,我只返回AccountType (9) 的第一个值。 我期待/想要取回AccountType所有值。 问题 2:一旦我解决了上述问题,我想使用AccountType值从另一个
3回复

从存储过程中删除XML中的行

我想看看是否可以使用存储过程从xml中删除一些数据。 我有一个XML文件,每次我将数据添加到我的表中时,它也会将它添加到我的XML文件中。 这是我的XML文件的示例: 如您所见,名称和时间都是我表格中的字段。 哪个Name是我表中记录的id及其唯一值。 我想知道是否有办法
1回复

在存储过程中以xml查询日期

我有一个存储过程 在表ActivityLog , SearchParameter是一个xml列。 xml以这种格式存储在此处 基于存储过程中的联接,我必须在ActivityLog选择记录。 FirstName , LastName , Gender , Startdate和E
2回复

存储过程中的FOR XML AUTO [关闭]

存储过程中的FOR XML AUTO查询以及使用ExecuteXmlReader检索数据以设置业务对象是否会对性能造成影响?
1回复

使用表中的xml输出调用存储过程

在一个紧迫的期限内,我知道我最终可以解决这个问题,但我没有太多时间自己做。 我有一个表,其中包含客户ID和帐号以及许多其他列中的列。 单个客户可能有很多帐户(许多行具有相同的客户ID但帐号不同)。 对于表中的每个客户,我需要调用存储过程并以下列格式将数据从表中传递为xml。 请注