April 10, 2008 at 12:56 pm
I have an XML response string.
I need to query a table and fetch Desc for Id 1 and replace it with AAAA. Can I join this XML with Desctable and fetch message directly ?
Desc Table
1 Absent
2 Failed Min Mark
Final string is like this
April 11, 2008 at 2:47 am
Look up sql:column and sql:variable in Books Online.
For a more accurate answer, please, provide a sample query (including table DDL and sample data) and a sample of the XML.
ML
---
Matija Lah, SQL Server MVP
http://milambda.blogspot.com
December 13, 2011 at 2:47 pm
I think I have a very similar need:
a) I have an "input" xml document that carries the input specifications for multiple tests:
declare @xmlInput xml
set @xmlInput = '<Tests>
<Test>
<Id>1</Id>
<Name>Test1</Name>
<Inputs>
<Input1>17</Input1>
<Input2>18</Input2>
</Inputs>
</Test>
<Test>
<Id>2</Id>
<Name>Test2</Name>
<Inputs>
<Input1>47</Input1>
<Input2>48</Input2>
</Inputs>
</Test>
</Tests>'
select @xmlinput
b) The tests are run and the results for each test are written to a table:
create table TestResults (RequestId int, Results xml)
insert TestResults values (1,'<Results><a>101</a><b>102</b></Results>')
insert TestResults values (2,'<Results><a>201</a><b>202</b></Results>')
select * from TestResults
c) Now I need to create a third process that merges the results into the original test specification document. I need the results to look like this:
<Tests>
<Test>
<Id>1</Id>
<Name>Test1</Name>
<Inputs>
<Input1>17</Input1>
<Input2>18</Input2>
</Inputs>
<Results>
<a>101</a>
<b>102</b>
</Results>
</Test>
<Test>
<Id>2</Id>
<Name>Test2</Name>
<Inputs>
<Input1>47</Input1>
<Input2>48</Input2>
</Inputs>
<Results>
<a>201</a>
<b>202</b>
</Results>
</Test>
</Tests>
So somehow I need to join the original document with the results table on "test id" and insert a new "Results" node for each test. Any help would be appreciated.
December 13, 2011 at 3:25 pm
Try this:
declare@resultxml
set@result
= (
selectTests.Test.query('Id')
,Tests.Test.query('Name')
,Tests.Test.query('Inputs')
,TestResults.Results.query('child::*')
from@xmlinput.nodes
('
/Tests/Test
') Tests (Test)
inner joinTestResults
onTestResults.RequestId = Tests.Test.query('Id').value('.', 'int')
for xml path('Test'), root('Tests'), type
)
select@result
ML
---
Matija Lah, SQL Server MVP
http://milambda.blogspot.com
December 13, 2011 at 5:19 pm
YES!!!!!
This does the trick. Thanks so much, I hope it addresses the original question as well.
December 14, 2011 at 12:52 am
Who knows.
The OP never came back with a sample as comprehensive as yours.
ML
---
Matija Lah, SQL Server MVP
http://milambda.blogspot.com
Viewing 6 posts - 1 through 6 (of 6 total)
You must be logged in to reply to this topic. Login to reply
This website stores cookies on your computer.
These cookies are used to improve your website experience and provide more personalized services to you, both on this website and through other media.
To find out more about the cookies we use, see our Privacy Policy