سؤال

فيما يلي نسخة مبسطة من استعلام قمت بإنشائه بالفعل. يعمل الاستعلام بشكل جيد ، لكن لا يمكنني معرفة كيفية الحصول على إعلان 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 تلقائيًا.

أتمنى أن يساعد ذلك. يعتبر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top