我從 SQL ServerFOR XML PATH陳述句生成了 XML,如下所示:
USE MySQLDB
SELECT *
FROM BillTable
FOR XML PATH ('BillAdd'), ROOT ('BillAddRq')
這是結果:
<BillAddRq>
<BillAdd>
<TxnID>2432-1071510295</TxnID>
<TimeCreated>2003-12-16T01:44:55</TimeCreated>
<TimeModified>2015-12-15T22:38:33</TimeModified>
<EditSequence>1450190313</EditSequence>
<TxnNumber>413</TxnNumber>
<VendorRef_ListID>E0000-933272656</VendorRef_ListID>
<VendorRef_FullName>Timberloft Lumber</VendorRef_FullName>
<APAccountRef_ListID>C0000-933270541</APAccountRef_ListID>
<APAccountRef_FullName>Accounts Payable</APAccountRef_FullName>
<TxnDate>2016-12-01T00:00:00</TxnDate>
<DueDate>2017-12-31T00:00:00</DueDate>
<AmountDue>80.50000</AmountDue>
<TermsRef_ListID>50000-933272659</TermsRef_ListID>
<TermsRef_FullName>1% 10 Net 30</TermsRef_FullName>
<IsPaid>0</IsPaid>
</BillAdd>
<BillAdd>
<TxnID>243A-1071510389</TxnID>
<TimeCreated>2003-12-16T01:46:29</TimeCreated>
<TimeModified>2015-12-15T22:38:33</TimeModified>
<EditSequence>1450190313</EditSequence>
<TxnNumber>414</TxnNumber>
<VendorRef_ListID>C0000-933272656</VendorRef_ListID>
<VendorRef_FullName>Perry Windows & Doors</VendorRef_FullName>
<APAccountRef_ListID>C0000-933270541</APAccountRef_ListID>
<APAccountRef_FullName>Accounts Payable</APAccountRef_FullName>
<TxnDate>2016-12-02T00:00:00</TxnDate>
<DueDate>2018-01-01T00:00:00</DueDate>
<AmountDue>50.00000</AmountDue>
<TermsRef_ListID>10000-933272658</TermsRef_ListID>
<TermsRef_FullName>Net 30</TermsRef_FullName>
<IsPaid>0</IsPaid>
</BillAdd>
</BillAddRq>
現在,我想用這些節點封裝上面的內容:
<?xml version="1.0" encoding="utf-8"?>
<?qbxml version="15.0"?>
<QBXML>
<QBXMLMsgsRq onError="stopOnError">
//above generated xml//
</QBXMLMsgsRq>
</QBXML>
我將如何在上面創建的 SQL 查詢中實作這一點?
我是 SQL Server 和 XML 的新手。我正在嘗試直接從我的資料庫生成這個 XML,反之亦然,以使其更高效、更快——讓我的 SQL 直接與 XML 通信。
嘗試 1:
USE MySQLDB;
GO
DECLARE @myDoc XML;
SET @myDoc = '<QBXML>
<QBXMLMsgsRq one rror="stopOnError">
</QBXMLMsgsRq>
</QBXML>';
SET @myDoc.modify('
insert
-- instead of inserting string here.. I would like to insert here the query I made above
into (/QBXML/QBXMLMsgsRq)[1]');
SELECT @myDoc;
嘗試 2:
USE MySQLDB;
GO
DECLARE @myDoc XML;
SET @myDoc = '<QBXML>
<QBXMLMsgsRq one rror="stopOnError">
</QBXMLMsgsRq>
</QBXML>';
DECLARE @qry XML;
SET @qry = (SELECT * FROM BillTable FOR XML PATH ('BillAdd'), ROOT ('BillAddRq'));
-- SELECT @qry;
SET @myDoc.modify('insert @qry
into (/QBXML/QBXMLMsgsRq)[1]');
SELECT @myDoc;
uj5u.com熱心網友回復:
有很多方法可以構建您的 XML 結果,請考慮以下三種替代方法...
使用 XML.modify() 將 BillTable XML 插入 XML 標量變數(包括?qbxmlXML 處理指令):
declare @BillTableXml xml = (
select *
from BillTable
for xml path('BillAdd'), root('BillAddRq')
);
declare @myDoc xml = '<?xml version="1.0" encoding="utf-8"?>
<?qbxml version="15.0"?>
<QBXML>
<QBXMLMsgsRq one rror="stopOnError">
</QBXMLMsgsRq>
</QBXML>';
set @myDoc.modify('
insert sql:variable("@BillTableXml")
into (/QBXML/QBXMLMsgsRq)[1]
');
select @myDoc as Result;
使用嵌套查詢來構造整個 XML 結果(但不包括?qbxmlXML 處理指令):
select
'stopOnError' as [QBXML/QBXMLMsgsRq/@onError],
(
select *
from BillTable
for xml path('BillAdd'), root('BillAddRq'), type
) as [QBXML/QBXMLMsgsRq]
for xml path('');
或者使用 XQuery 構造整個 XML 結果(其中還包括?qbxmlXML 處理指令):
select BillTableXml.query('
<?qbxml version="15.0"?>,
<QBXML>
<QBXMLMsgsRq one rror="stopOnError">
{ /BillAddRq }
</QBXMLMsgsRq>
</QBXML>
') as Result
from (
select *
from BillTable
for xml path('BillAdd'), root('BillAddRq'), type
) Data (BillTableXml);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/460793.html
上一篇:免費建站
