2016-09-27 1 views
1

Ich versuche, das XML im folgenden gewünschten Format in SQL Server 2014 zu generieren. Aber ich bin nicht in der Lage, diese kleine Änderung des Hinzufügens des Attributnamens zum Param durchzuführen Elemente. Ich möchte einfach das Attribut "name" dem Param-Element mit dem Wert hinzufügen.sql server - Für XML Raw - Ein benutzerdefiniertes Attribut zum Element hinzufügen

aktuelle SQL-Statements: -

Declare @requestMessage xml, 
    @P1 nvarchar(20)= 'Rocky', @P2 nvarchar(20) = 'Boxer', @P3 nvarchar(20) = 'SpaceX', 
@P4 nvarchar(20) 

select @requestMessage = (select 'dbo.usp_InsertUserPlay' as [SProc], 
            (select @P1 as [Param], 
              @P2 as [Param],  
              @P3 as [Param],   
              @P4 as [Param],  
              0 as [Param] 
         FOR XML RAW('ParamList'), TYPE, ELEMENTS XSINIL) 
        FOR XML PATH('AsyncRequest'), TYPE, ELEMENTS XSINIL) 

select @requestMessage AS XML_Output 

XML-Ausgabe: -

<AsyncRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <SProc>dbo.usp_InsertUserPlay</SProc> 
    <ParamList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <Param>Rocky</Param> 
    <Param>Boxer</Param> 
    <Param>SpaceX</Param> 
    <Param xsi:nil="true" /> 
    <Param>0</Param> 
    </ParamList> 
</AsyncRequest> 

Mein Wunsch XML-Ausgabe: -

<AsyncRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <SProc>dbo.usp_InsertUserPlay</SProc> 
    <ParamList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
     <Param name="P1">Rocky</Param> 
     <Param name="P2">Boxer</Param> 
     <Param name="P3">SpaceX</Param> 
     <Param name="P4" xsi:nil="true" /> 
     <Param name="P5">0</Param> 
    </ParamList> 
</AsyncRequest> 

Antwort

2

Diese erwartete XML generieren soll:

Declare 
    @P1 nvarchar(20)= 'Rocky', 
    @P2 nvarchar(20) = 'Boxer', 
    @P3 nvarchar(20) = 'SpaceX', 
    @P4 nvarchar(20) 

select 'dbo.usp_InsertUserPlay' as [SProc], 
(
    select * FROM (VALUES 
     ('P1', @P1), 
     ('P2', @P2),  
     ('P3', @P3), 
     ('P4', @P4), 
     ('P5', '0')) T([Param/@name], [Param]) 
    FOR XML PATH(''), ROOT('ParamList'), TYPE, ELEMENTS XSINIL 
) FOR XML PATH('AsyncRequest'), TYPE, ELEMENTS XSINIL 

Ergebnis:

<AsyncRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <SProc>dbo.usp_InsertUserPlay</SProc> 
    <ParamList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <Param name="P1">Rocky</Param> 
    <Param name="P2">Boxer</Param> 
    <Param name="P3">SpaceX</Param> 
    <Param name="P4" xsi:nil="true" /> 
    <Param name="P5">0</Param> 
    </ParamList> 
</AsyncRequest> 
+0

Danke für die Hilfe :-) – Karan

+0

Eine andere Sache, die ich hier bemerkt. Wir müssen die nicht auf Zeichenfolgen basierenden Parameter auf den Datentyp Nvarchar (max) CAST stellen, um den Laufzeit-XML-Generierungsfehler zu vermeiden. Zum Beispiel, wenn @ P4 int ist, dann sollte die Anweisung sein ('P4', CAST (@ P4 als nvarchar (max))) – Karan

Verwandte Themen