首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为SQL中的值创建XML节点

为SQL中的值创建XML节点
EN

Stack Overflow用户
提问于 2022-06-30 16:34:45
回答 2查看 81关注 0票数 1

我有一个问题要创建XML节点。帮助是非常感谢的!

这是一个示例代码

代码语言:javascript
复制
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')

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

代码语言:javascript
复制
<paySchedule>
  <employees>
    <Company>
      <Employee>John</Employee>
      <PayFrequency>Monthly</PayFrequency>
    </Company>
  </employees>
  <employees>
    <Company>
      <Employee>Carl</Employee>
      <PayFrequency>Biweekly</PayFrequency>
    </Company>
  </employees>
</paySchedule>

我希望将"paymentFrequency“值作为节点。有办法这样做吗?

代码语言:javascript
复制
<paySchedule>
  <employees>
    <Company>
      <Employee>John</Employee>
      <PayFrequency>
          <Monthly/>
      </PayFrequency>
    </Company>
  </employees>
  <employees>
    <Company>
      <Employee>Carl</Employee>
      <PayFrequency>
          <Biweekly/>
      </PayFrequency>
    </Company>
  </employees>
</paySchedule>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-01 00:07:52

您可以对每种可能性使用一个CASE条件,在需要该节点时返回一个空字符串,否则返回空字符串。

代码语言:javascript
复制
SELECT
  t.employeeName AS [Company/Employee],
  CASE WHEN t.payFrequency = 'Monthly' THEN '' END AS [Company/PayFrequency/Monthly],
  CASE WHEN t.payFrequency = 'Biweekly' THEN '' END AS [Company/PayFrequency/Biweekly]
FROM @tbl t
FOR XML PATH('employees'), ROOT('paySchedule'), TYPE;

您也可以在嵌套的FOR XML中这样做。

代码语言:javascript
复制
SELECT
  t.employeeName AS [Company/Employee],
  (
      SELECT
        CASE WHEN t.payFrequency = 'Monthly' THEN '' END AS Monthly,
        CASE WHEN t.payFrequency = 'Biweekly' THEN '' END AS Biweekly
      FOR XML PATH(''), TYPE
  ) AS [Company/PayFrequency]
FROM @tbl t
FOR XML PATH('employees'), ROOT('paySchedule'), TYPE;

注意,<Monthly></Monthly><Monthly />在语义上是等价的。

票数 0
EN

Stack Overflow用户

发布于 2022-06-30 16:53:45

请尝试以下解决方案。

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

SQL

代码语言:javascript
复制
-- 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>');

输出

代码语言:javascript
复制
<paySchedule>
  <employees>
    <Company>
      <Employee>John</Employee>
      <PayFrequency>
        <Monthly />
      </PayFrequency>
    </Company>
  </employees>
  <employees>
    <Company>
      <Employee>Carl</Employee>
      <PayFrequency>
        <Biweekly />
      </PayFrequency>
    </Company>
  </employees>
</paySchedule>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72819213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档