I am trying to append some nodes to an existing XML in the database. The XML looks like the following:
<Parameters>
<Parameter>
<Name>ColumnsToDisplay</Name>
<Value>Priority</Value>
<Value>Description</Value>
<Value>Asset ID</Value>
</Parameter>
</Parameters>
The number of values can vary for each parameter. I'm trying to update the XML by appending a few new values as with the query below. Its a little wonky but it is the only way I could get FOR XML AUTO to work.
set @NewXML =
(
select * from
(
SELECT
Parameter.C.value('Name[1]', 'varchar(256)') as Name,
Parameter.C.value('Value[1]', 'varchar(256)') AS Value
FROM tblSavedReportParameters
CROSS APPLY ParameterXML.nodes('//Parameter') Parameter(C)
where savedreportid = @SavedReportID
union
select 'FilterType' as Name, '#All' as Value
union
select 'FilterText' as Name, '#All' as value
) as Parameter for xml Auto, elements, root('Parameters')
)
Everything works great except the new XML only returns the first value for each parameter. I've tried a variety of CROSS APPLY and INNER JOINS on the value node and just can't get the syntax down. It currently looks like this:
<Parameters>
<Parameter>
<Name>ColumnsToDisplay</Name>
<Value>Priority</Value>
</Parameter>
<Parameter>
<Name>FilterText</Name>
<Value>#All</Value>
</Parameter>
<Parameter>
<Name>FilterType</Name>
<Value>#All</Value>
</Parameter>
</Parameters>
How can I update the query to return all the values for each parameter? Thanks!