हाय मेरे पास एसक्यूएल में निम्न कोड है जो 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="1.0" encoding="UTF-8"?">
<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="1.0" encoding="UTF-8&
से कैसे छुटकारा पा सकता हूं: "<invoice-lines xmlns:ext="?xml version="1.0" encoding="UTF-8"?">"
- मैं आउटपुट प्राप्त करने के लिए
"<tax-amount>7.500000</tax-amount>
को कैसे कोड करूं":"<tax-amount type="decimal">7.500000</tax-amount>"
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>
संबंधित सवाल
नए सवाल
sql-server
Microsoft SQL सर्वर एक रिलेशनल डेटाबेस मैनेजमेंट सिस्टम (RDBMS) है। कॉम्पैक्ट, एक्सप्रेस, एज़्योर, फास्ट-ट्रैक, एपीएस (पूर्व में पीडीडब्ल्यू) और एज़्योर SQL डीडब्ल्यू सहित सभी SQL सर्वर संस्करणों के लिए इस टैग का उपयोग करें। अन्य प्रकार के DBMS (MySQL, PostgreSQL, Oracle, आदि) के लिए इस टैग का उपयोग न करें। सॉफ़्टवेयर और मोबाइल विकास के मुद्दों के लिए इस टैग का उपयोग न करें, जब तक कि यह सीधे डेटाबेस से संबंधित न हो।
?xml version="1.0" encoding="UTF-8"?
नाम स्थान नहीं है, यह एक XML निर्देश है। बस इस घोषणा को पूरी तरह हटा दें। (एसक्यूएल सर्वर ऐसे निर्देश उत्पन्न नहीं करता है; यदि आपको इसकी आवश्यकता है, तो इसे बाद में पाठ में परिवर्तित एक्सएमएल के साथ जोड़ दें, लेकिन ध्यान दें कि यह एक झूठ है क्योंकि स्ट्रिंग का एन्कोडिंग यूटीएफ -8 है नहीं .) एन्कोडिंग विशेषताएँ@
सिंटैक्स (SELECT 'decimal' AS [tax-amount/@type], 7.5 AS [tax-amount] FOR XML PATH('')
) के साथ की जाती हैं।