إعلان XML مع "For XML Path" في SQL Server 2005
-
22-09-2019 - |
سؤال
فيما يلي نسخة مبسطة من استعلام قمت بإنشائه بالفعل. يعمل الاستعلام بشكل جيد ، لكن لا يمكنني معرفة كيفية الحصول على إعلان XML في الجزء العلوي من XML المتولد. لقد جربت أشياء متعددة وبحثت بعيدًا عن Google ، لكن للأسف لا يبدو أنني اكتشفت كيفية القيام بذلك ... أو حتى إذا كان ذلك ممكنًا.
select
'Dimension' "@type",
(
select
(
select
'X102' "TransactionType",
convert(varchar, getdate(), 104) "Transfer/TransferDate",
convert(varchar, getdate(), 108) "Transfer/TransferTime"
for xml path (''), type
) "TransactionInformation"
for xml path (''), type
)
for xml path ('DimensionImport'), type
يعطيني...
<DimensionImport type="Dimension">
<TransactionInformation>
<TransactionType>X102</TransactionType>
<Transfer>
<TransferDate>21.01.2010</TransferDate>
<TransferTime>15:46:36</TransferTime>
</Transfer>
</TransactionInformation>
</DimensionImport>
أنا أريد ...
<?xml version="1.0" encoding="ISO-8859-1" ?>
<DimensionImport type="Dimension">
<TransactionInformation>
<TransactionType>X102</TransactionType>
<Transfer>
<TransferDate>21.01.2010</TransferDate>
<TransferTime>15:46:36</TransferTime>
</Transfer>
</TransactionInformation>
</DimensionImport>
شكرًا لك مقدمًا على أي مساعدة قد تكون قادرًا على الإقراض.
المحلول 4
هذا ما انتهى بي الأمر. لم يتم إرجاع نوع البيانات كنوع بيانات XML ، لكن يمكنني التعامل مع ذلك.
select '<?xml version="1.0" encoding="ISO-8859-1" ?>' +
(
select
'Dimension' "@type",
(
select
(
select
'X102' "TransactionType",
convert(varchar, getdate(), 104) "Transfer/TransferDate",
convert(varchar, getdate(), 108) "Transfer/TransferTime"
for xml path (''), type
)
for xml path ('TransactionInformation'), type
),
(
... queried up data here ...
)
for xml path ('DimensionImport')
)
نصائح أخرى
إنه فوضوي ، لكن يمكنك فقط تسلسله على المقدمة ...
SELECT '<? xml...>' +
(select
'Dimension' "@type",
(
select
(
select
'X102' "TransactionType",
convert(varchar, getdate(), 104) "Transfer/TransferDate",
convert(varchar, getdate(), 108) "Transfer/TransferTime"
for xml path (''), type
) "TransactionInformation"
for xml path (''), type
)
for xml path ('DimensionImport'), type)
جرب هذا:
select '<?xml version="1.0" encoding="ISO-8859-1" ?>' +
(your whole upper select here)
لسوء الحظ هذا ما وجدته كتب خادم SQL عبر الإنترنت:
لا يتم الحفاظ على إعلان XML PI في حالة عندما يتم تخزين المثيل في قاعدة البيانات. فمثلا:
Copy Code CREATE TABLE T1 (Col1 int primary key, Col2 xml)
GO
INSERT INTO T1 values (1, '<?xml version="1.0" encoding="windows-1252" ?><doc></doc>')
GO
SELECT Col2
FROM T1
النتيجه هي <doc/>
.
الحل الوحيد هو إعادة XML كنوع Varchar (Max):
select '<?xml version="1.0" encoding="ISO-8859-1" ?>'
+
cast( (
select
'Dimension' "@type",
(
select
(
select
'X102' "TransactionType",
convert(varchar, getdate(), 104) "Transfer/TransferDate",
convert(varchar, getdate(), 108) "Transfer/TransferTime"
for xml path (''), type
) "TransactionInformation"
for xml path (''), type
)
for xml path ('DimensionImport'), type) as varchar(max))
في عام 2008 R2 من EM ، إذا فتحت زر "حفظ AS" وتوسيع "حفظ" ، يمكنك حفظ تشفير الساحرة ، بعد ذلك ، تتم إضافة إعلان XML تلقائيًا.
أتمنى أن يساعد ذلك. يعتبر.