从 SQL 问题生成 XML

问题描述 投票:0回答:1

我需要生成以下格式的XML:

我没有在任务的 xml 部分走得太远,因为我遇到了以下情况,你可以看出这显然不是我的意图。

考虑到 BBANIBAN 需要位于

AccountNo
以及我希望其根据第一张图片进行格式化,我该如何正确处理这个问题。


完整的查询以及我生成 xml 的公平尝试如下所示:

DECLARE @AccountType NVARCHAR(3);
DECLARE @kodBanke NVARCHAR(3);

SET @AccountType = 'T';
SET @kodBanke = ( SELECT vrednost FROM dbini WHERE IDENT = 'KOD' AND SECTION = 'PP' );

WITH Ent_Posta
AS
(
    SELECT e.naziv,p.posta,e.sifra
    FROM entitet AS e
         INNER JOIN poste AS p ON e.sifra = p.entitet
)
SELECT (
  SELECT 
    [dbo].[brojracuna](@kodBanke,i.partija) AS 'BBAN',
    [dbo].[GENERATEIBAN](i.partija) AS 'IBAN'
     FOR XML PATH('AccountNo'), ELEMENTS, ROOT('Account')
     ),
    @accountType AS 'AccountType',
    (a.ime + ' ( ' + a.roditel + ' ) ' + a.prezime) AS 'Name',
    a.embg AS 'UID',
    CASE status 
       WHEN 2 THEN 'A' 
       WHEN 4 THEN 'B'
       WHEN 8 THEN 'U'
    END AS 'Status',
     c.sifra AS 'Territory',
     @kodBanke as 'ID_Bank',
   REPLACE(CONVERT(VARCHAR(10), i.DOTVaRANJE, 120), '.', '') + '-' + RIGHT( '0' + CONVERT(VARCHAR(2), DATEPART(hh, i.DOTVaRANJE)), 2) + '' + RIGHT('0' + CONVERT(VARCHAR(2), DATEPART(mi, i.DOTVaRANJE)), 2) + '' + RIGHT('0' + CONVERT(VARCHAR(2), DATEPART(s, i.DOTVaRANJE)),2) AS OpeningDate,

   REPLACE(CONVERT(VARCHAR(10),'2006.09.28 ', 120), '.', '') + '-' + RIGHT( '0' + CONVERT(VARCHAR(2), DATEPART(hh, '2006.09.28' )), 2) + '' + RIGHT('0' + CONVERT(VARCHAR(2), DATEPART(mi, '2006.09.28 ')), 2) + '' + RIGHT('0' + CONVERT(VARCHAR(2),DATEPART(s,'2006.09.28 ')),2) AS ClosingDate
     FROM adresar AS a
  INNER JOIN istdden AS i 
      ON a.embg = i.embg
        INNER JOIN Ent_Posta as c
        ON a.postbroj = c.posta
           FOR XML PATH ('Account'), ROOT('Accounts');

删除这部分后,我得到...

<Accounts>
  <Account>
    <BBAN>5710543102313248</BBAN>
    <IBAN>BA39531231634039248</IBAN>
    <AccountType>T</AccountType>
    <Name>DARKO ( DRAGAN ) TESIC</Name>
    <UID>0000005467234</UID>
    <Status>A</Status>
    <Territory>1</Territory>
    <ID_Bank>571</ID_Bank>
    <OpeningDate>20081205-000000</OpeningDate>
    <ClosingDate>20060928-000000</ClosingDate>
  </Account>

...但现在

AccountNO
不见了。

sql-server xml t-sql xpath sqlxml
1个回答
1
投票

如果我理解正确的话 - 你正在与

1:1
值作斗争,但在一些更深的嵌套中。

您可以在

XPath
中使用与
[]
相关的类似
FOR XML PATH
的表达式。看看这个:

SELECT 'blah' AS FirstNode
      ,'blub' AS [SecondNode/OneDeeper]
      ,'blib' AS [SecondNode/OneMore]
      ,'ballaballa' AS [ThirdNode]
FOR XML PATH('row'),ROOT('root');

结果(特别看

<SecondNode>

<root>
  <row>
    <FirstNode>blah</FirstNode>
    <SecondNode>
      <OneDeeper>blub</OneDeeper>
      <OneMore>blib</OneMore>
    </SecondNode>
    <ThirdNode>ballaballa</ThirdNode>
  </row>
</root>

对于您的问题,在查询中使用

AS [AccountNo/IBAN]
可能就足够了。

© www.soinside.com 2019 - 2024. All rights reserved.