【问题标题】:Create XML nodes for values in SQL为 SQL 中的值创建 XML 节点
【发布时间】:2022-07-01 01:02:04
【问题描述】:

我在创建 XML 节点时遇到问题。非常感谢您的帮助!

这是一个示例代码

declare @tbl as table 
(
    employeeName    nvarchar(50),
    payFrequency    nvarchar(50)
)

insert into @tbl
select 'John', 'Monthly'
union
select 'Carl', 'Biweekly'

select 
employeeName        AS 'Company/Employee',
payFrequency        AS 'Company/PayFrequency'
from @tbl
for xml path ('employees'), root('paySchedule')

上面的代码创建了这个输出:

<paySchedule>
  <employees>
    <Company>
      <Employee>John</Employee>
      <PayFrequency>Monthly</PayFrequency>
    </Company>
  </employees>
  <employees>
    <Company>
      <Employee>Carl</Employee>
      <PayFrequency>Biweekly</PayFrequency>
    </Company>
  </employees>
</paySchedule>

我想将“paymentFrequency”值作为一个节点。有没有办法做到这一点?

<paySchedule>
  <employees>
    <Company>
      <Employee>John</Employee>
      <PayFrequency>
          <Monthly/>
      </PayFrequency>
    </Company>
  </employees>
  <employees>
    <Company>
      <Employee>Carl</Employee>
      <PayFrequency>
          <Biweekly/>
      </PayFrequency>
    </Company>
  </employees>
</paySchedule>

【问题讨论】:

标签: sql-server xml tsql xquery for-xml-path


【解决方案1】:

请尝试以下解决方案。

它使用 XQuery 的 FLWOR 表达式来组成所需的 XML。

SQL

-- DDL and sample data population, start
DECLARE @tbl as table (employeeName NVARCHAR(50), payFrequency NVARCHAR(50));
INSERT INTO @tbl VALUES
('John', 'Monthly'),
('Carl', 'Biweekly');
-- DDL and sample data population, end

SELECT (
    SELECT * FROM @tbl
    FOR XML PATH('r'), TYPE, ROOT('root')
).query('<paySchedule>
{
    for $r in /root/r
    return <employees>
        <Company>
        <Employee>{data($r/employeeName)}</Employee>
        <PayFrequency>
                {
                    if ($r/payFrequency/text()="Monthly") then <Monthly/>
                    else <Biweekly/>
                }
            </PayFrequency>
        </Company>
    </employees>
}
</paySchedule>');

输出

<paySchedule>
  <employees>
    <Company>
      <Employee>John</Employee>
      <PayFrequency>
        <Monthly />
      </PayFrequency>
    </Company>
  </employees>
  <employees>
    <Company>
      <Employee>Carl</Employee>
      <PayFrequency>
        <Biweekly />
      </PayFrequency>
    </Company>
  </employees>
</paySchedule>

【讨论】:

    猜你喜欢
    • 2014-07-22
    • 2018-08-24
    • 2017-05-31
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    相关资源
    最近更新 更多