简体   繁体   English

Select 数据库中 XML 列中的第二行使用 SQL

[英]Select 2nd row in XML Column in database using SQL

Having trouble selecting a specific info from an XML Format in a column of a table in the database.无法从数据库中表的列中的 XML 格式选择特定信息。 I need to pull the Success message for ModuleID 959我需要提取 ModuleID 959 的成功消息

SubmissionID提交ID ModuleID模块ID CreatedOn创建于 XMLCOL XMLCOL UpdatedOn更新开
25 25 959 959 1-1-22 1-1-22 "see XML below" “见下面的 XML” 1-1-22 1-1-22
26 26 339 339 2-1-22 2-1-22 Null Null 2-1-22 2-1-22

Below is the data inside the XML column within the database - what I want to achieve is to show the 2nd ResultType "success" in the query with SQL.下面是数据库中 XML 列中的数据 - 我想要实现的是在使用 SQL 的查询中显示第二个 ResultType“成功”。

<ArrayOfActionResult xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <ActionResult>
    <ResultType>Redirected to Payment</ResultType>
    <ActionName>Payment</ActionName>
    <ExecutionTime></ExecutionTime>
    <ConditionSet>
      <Conditions />
      <ExecuteCondition>Always</ExecuteCondition>
      <MatchCondition>All</MatchCondition>
      <ExecuteStatus>0</ExecuteStatus>
      <Groups />
    </ConditionSet>
    <ConditionsMet>true</ConditionsMet>
    <Condition />
  </ActionResult>
  <ActionResult>
    <ResultType>Success</ResultType>
     <ActionName>Payment</ActionName>
    <ExecutionTime></ExecutionTime>
    <ConditionSet>
      <Conditions />
      <ExecuteCondition>Always</ExecuteCondition>
      <MatchCondition>All</MatchCondition>
      <ExecuteStatus>0</ExecuteStatus>
      <Groups />
    </ConditionSet>
    <ConditionsMet>true</ConditionsMet>
  </ActionResult>
</ArrayOfActionResult>

Currently I'm trying to use the SQL below to no avail目前我正在尝试使用下面的 SQL 无济于事

SELECT [XMLCOL].value('/ArrayOfActionResult/ActionResult/ResultType[2]') as PaymentMessage
FROM Databasetable
where [ModuleID] = 959

Hopefully this makes sense, I found it quite difficult to explain, I am very new to SQL希望这是有道理的,我发现很难解释,我对 SQL 很陌生

Check it out below.看看下面。

Assuming your db is MS SQL Server.假设您的数据库是 MS SQL 服务器。

The XQuery .value() method has two mandatory parameters. XQuery .value()方法有两个强制参数。

SQL SQL

-- DDL and sample data population, start
DECLARE @tbl TABLE (ModuleID INT PRIMARY KEY, XMLCOL XML);
INSERT INTO @tbl (ModuleID, XMLCOL) VALUES
(959, N'<ArrayOfActionResult xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <ActionResult>
        <ResultType>Redirected to Payment</ResultType>
        <ActionName>Payment</ActionName>
        <ExecutionTime></ExecutionTime>
        <ConditionSet>
            <Conditions/>
            <ExecuteCondition>Always</ExecuteCondition>
            <MatchCondition>All</MatchCondition>
            <ExecuteStatus>0</ExecuteStatus>
            <Groups/>
        </ConditionSet>
        <ConditionsMet>true</ConditionsMet>
        <Condition/>
    </ActionResult>
    <ActionResult>
        <ResultType>Success</ResultType>
        <ActionName>Payment</ActionName>
        <ExecutionTime></ExecutionTime>
        <ConditionSet>
            <Conditions/>
            <ExecuteCondition>Always</ExecuteCondition>
            <MatchCondition>All</MatchCondition>
            <ExecuteStatus>0</ExecuteStatus>
            <Groups/>
        </ConditionSet>
        <ConditionsMet>true</ConditionsMet>
    </ActionResult>
</ArrayOfActionResult>');
-- DDL and sample data population, end

SELECT ModuleID
    , XMLCOL.value('(/ArrayOfActionResult/ActionResult[2]/ResultType/text())[1]','VARCHAR(30)') as PaymentMessage
FROM @tbl
WHERE ModuleID = 959;

Output Output

+----------+----------------+
| ModuleID | PaymentMessage |
+----------+----------------+
|      959 | Success        |
+----------+----------------+

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM