हाय मेरे पास एसक्यूएल में निम्न कोड है जो 2 टेबल के बीच एक्सएमएल आउटपुट करता है। आउटपुट 90% सही है लेकिन यदि संभव हो तो आउटपुट में जोड़ें और फिर कुछ आउटपुट टेक्स्ट को भी हटा दें।

मुझे यकीन नहीं है कि एसक्यूएल में आउटपुट में किसी प्रकार के तत्व को कोड करने की क्षमता है या नहीं। कृपया आउटपुट के साथ नीचे दिया गया कोड देखें। वर्तमान में यदि संभव हो तो मैं अपने वर्तमान आउटपुट में 2 परिवर्तन करना चाहूंगा। परिवर्तन पोर्ट के अंत में सूची हैं



DECLARE @ID_Rechnung int = 1978,
    @XMLData xml;

WITH XMLNAMESPACES ('?xml version="1.0" encoding="UTF-8"?' as ext)

SELECT
    @XMLData = xmldat.xmldataCol 
FROM
(
SELECT (
       SELECT
            -- HIER XML Daten generieren
            [InvoiceHeader].[InvoiceDate]            AS 'invoice-date',
            ([InvoiceHeader].[InvoiceNumber])                           AS 'invoice-number',
       cast(replace([InvoiceHeader].[GrossValue],' ','') as decimal(18,2))                           AS 'gross-total',
        cast(replace([InvoiceHeader].[NetValue],' ','') as decimal(18,2))                           AS 'amount-due',
        [InvoiceHeader].[VatRate]                           AS 'tax-rate',
        cast(replace([InvoiceHeader].[VatValue],' ','') as decimal(18,2))                           AS 'tax-amount',
        [ImagePath] AS 'image-scan-url',
        [InvoiceType] AS 'document-type',
        [LegalEntityVATNo] AS  'account-type/id',
        [LegalEntityName] AS  'account-type/name',
        [SupplierCode] as 'supplier/number',
        [Currency] as 'currency/code',   

    (
        SELECT rtrim([InvoiceLines].[LineNumber]) AS [order-line-num]
            , [PONumber] as [po-number],
            CAST([InvoiceLines].[UnitPrice] AS decimal(18,2)) AS Price ,
            [Quantity] as quantity,
            [TaxAmount] as [tax-amount],
            [LineTotal] as [total],
            [Decsription] as description


        FROM [InvoiceLines] WHERE [InvoiceLines].[DOCID] = @id_Rechnung
        FOR XML PATH('Invoice-line'), ROOT('invoice-lines'), TYPE
    )
FROM [InvoiceHeader] 
WHERE [InvoiceHeader].[DOCID]  = @ID_Rechnung
FOR XML PATH(''), TYPE, ROOT('invoice-header')

) AS xmldataCol
) AS xmldat;

SELECT  @XMLData
.query('<invoice-header>




{
   for $x in /invoice-header/*[local-name()!="root"]
   return $x,
     for $x in /invoice-header/root/r
     return <invoice-lines>/<invoice-line>{$x/*}</invoice-line></invoice-lines>
}
</invoice-header>');

आउटपुट:

<invoice-header>
  <invoice-date>20180509</invoice-date>
  <invoice-number>1075440</invoice-number>
  <gross-total>1376.67</gross-total>
  <amount-due>1197.10</amount-due>
  <tax-rate>15.00%</tax-rate>
  <tax-amount>179.57</tax-amount>
  <image-scan-url>\\INTEL-SQL01\Attachment\2018-06-20\7e0dd165-81d6-445a-95d1-8aac686d44ed\f9a1179c-2a54-480e-b97a-ce6ac7327ae0.000</image-scan-url>
  <account-type>
    <id>4010112052</id>
    <name>CONSOLIDATEDPOWERPROJECTS</name>
  </account-type>
  <supplier>
    <number>12345</number>
  </supplier>
  <currency>
    <code>ZAR</code>
  </currency>
  <invoice-lines xmlns:ext="?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?">
    <Invoice-line>
      <order-line-num>4</order-line-num>
      <po-number>120934861</po-number>
      <Price>50.00</Price>
      <quantity>1.000000</quantity>
      <tax-amount>7.500000</tax-amount>
      <total>50.00</total>
      <description>Test1</description>
    </Invoice-line>
    <Invoice-line>
      <order-line-num>2</order-line-num>
      <po-number>120934861</po-number>
      <Price>10.00</Price>
      <quantity>2.000000</quantity>
      <tax-amount>4.500000</tax-amount>
      <total>20.00</total>
      <description>Test2</description>
    </Invoice-line>
  </invoice-lines>
</invoice-header>

1. मैं पंक्ति में निम्नलिखित xmlns:ext="?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&से कैसे छुटकारा पा सकता हूं: "<invoice-lines xmlns:ext="?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?">"

  1. मैं आउटपुट प्राप्त करने के लिए "<tax-amount>7.500000</tax-amount> को कैसे कोड करूं": "<tax-amount type="decimal">7.500000</tax-amount>"
0
JCW 16 अगस्त 2021, 16:43
प्रश्न पूछते समय, आपको एक न्यूनतम प्रतिलिपि प्रस्तुत करने योग्य उदाहरण प्रदान करने की आवश्यकता है: (1) डीडीएल और नमूना डेटा जनसंख्या, अर्थात तालिका (ओं) को बनाएं प्लस टी-एसक्यूएल स्टेटमेंट डालें। (2) आपको क्या करना है, यानी तर्क और आपका कोड टी-एसक्यूएल में इसे लागू करने का प्रयास करता है। (3) उपरोक्त #1 में नमूना डेटा के आधार पर वांछित आउटपुट। (4) आपका SQL सर्वर संस्करण (चुनें @@ संस्करण;)।
 – 
Yitzhak Khabinsky
16 अगस्त 2021, 17:08
?xml version="1.0" encoding="UTF-8"? नाम स्थान नहीं है, यह एक XML निर्देश है। बस इस घोषणा को पूरी तरह हटा दें। (एसक्यूएल सर्वर ऐसे निर्देश उत्पन्न नहीं करता है; यदि आपको इसकी आवश्यकता है, तो इसे बाद में पाठ में परिवर्तित एक्सएमएल के साथ जोड़ दें, लेकिन ध्यान दें कि यह एक झूठ है क्योंकि स्ट्रिंग का एन्कोडिंग यूटीएफ -8 है नहीं .) एन्कोडिंग विशेषताएँ @ सिंटैक्स (SELECT 'decimal' AS [tax-amount/@type], 7.5 AS [tax-amount] FOR XML PATH('')) के साथ की जाती हैं।
 – 
Jeroen Mostert
16 अगस्त 2021, 17:17
धन्यवाद। मैं एक्सएमएल के लिए बहुत नया हूँ। सलाह और टिप्पणियों के लिए धन्यवाद
 – 
JCW
16 अगस्त 2021, 17:41

1 उत्तर

सबसे बढ़िया उत्तर

न्यूनतम प्रतिलिपि प्रस्तुत करने योग्य उदाहरण के बिना आपको पूर्ण कार्य उत्तर देना संभव नहीं है।

(1) जैसा कि @JeroenMostert ने पहले ही बताया है, the

'?xml version="1.0" encoding="UTF-8"?'

एक एक्सएमएल प्रोलॉग घोषणा है। बस निम्न पंक्ति हटाएं:

WITH XMLNAMESPACES ('?xml version="1.0" encoding="UTF-8"?' as ext)

(2) यहाँ एक वैचारिक उदाहरण है कि XML तत्व में एक विशेषता कैसे जोड़ें। यहाँ जो महत्वपूर्ण है वह है जोड़ने का क्रमिक क्रम, यानी विशेषता पहले होगी, तत्व स्वयं दूसरा है।

एसक्यूएल

DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, [tax-amount] VARCHAR(20));
INSERT INTO @tbl ([tax-amount]) VALUES
(N'7.500000'),
(N'18.000000');

SELECT 
    'decimal' AS [tax-amount/@type]
    , [tax-amount]
FROM @tbl
FOR XML PATH('r'), TYPE, ROOT('root');

आउटपुट

<root>
  <r>
    <tax-amount type="decimal">7.500000</tax-amount>
  </r>
  <r>
    <tax-amount type="decimal">18.000000</tax-amount>
  </r>
</root>
2
Yitzhak Khabinsky 16 अगस्त 2021, 17:26