Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
Author |
Topic |
rocknpop
Posting Yak Master
201 Posts |
Posted - 2011-07-14 : 02:03:20
|
Hi, I need to build XML from the table data but not able to figure out how to go about this. Below is the sample data , the desired output and the query I am using. Can anyone let me know the way to do this.-- SAMPLE DATADECLARE @TMP TABLE (ID INT,NAME VARCHAR(50),VALUE VARCHAR(50))INSERT INTO @TMPSELECT 1,'A',10UNIONSELECT 1,'B',20UNIONSELECT 1,'C',30UNIONSELECT 1,'D',40UNIONSELECT 1,'E',NULLUNIONSELECT 1,'F',NULL--DESIRED OUTPUT<Results> <Result> <DATA>FormID</DATA> -- THIS NEEDS TO BE HARD-CODED AS 'FORMID' <DATA>A</DATA> <DATA>B</DATA> <DATA>C</DATA> <DATA>D</DATA> <DATA>E</DATA> <DATA>F</DATA> </Result> <Result> <DATA>1</DATA> <DATA>10</DATA> <DATA>20</DATA> <DATA>30</DATA> <DATA>40</DATA> <DATA>NULL</DATA> -- CAN THIS BE NULL AS NO DATA FOR E <DATA>NULL</DATA> </Result></Results>--My Query, NEED TO MODIFY TO GET DESIRED OUTPUT SELECT ( SELECT NAME AS DATA from @TMP FOR XML PATH(''),ROOT('Result'),TYPE ), ( SELECT VALUE AS DATA from @TMP FOR XML PATH(''),ELEMENTS XSINIL,ROOT('Result'),TYPE ) FROM @TMP FOR XML PATH(''),ROOT('Results')Thanks--------------------Rock n Roll with SQL |
|
rocknpop
Posting Yak Master
201 Posts |
Posted - 2011-07-14 : 04:02:34
|
Solved it:SELECT(SELECT 'FORMID' AS 'Data',(SELECT NAME AS DATA from @TMP FOR XML PATH(''),TYPE,ELEMENTS)from @TMP GROUP BY IDFOR XML PATH('Result'),TYPE),(SELECT ID AS 'Data',(SELECT VALUE AS DATA from @TMP FOR XML PATH(''),TYPE,ELEMENTS XSINIL)from @TMP GROUP BY IDFOR XML PATH('Result'),TYPE)FROM @TMP GROUP BY IDFOR XML PATH(''),ROOT('Results'),TYPE--------------------Rock n Roll with SQL |
 |
|
rocknpop
Posting Yak Master
201 Posts |
Posted - 2011-07-14 : 23:46:07
|
Another question, please see the comments on the query:-- SAMPLE DATADECLARE @TMP TABLE (ID INT,NAME VARCHAR(50),VALUE VARCHAR(50))INSERT INTO @TMPSELECT 1,'A','10'UNIONSELECT 1,'D',''UNIONSELECT 1,'E',NULL-- SHOWS NULL/EMPTY VALUES AS <DATA />SELECT(SELECT 'FORMID' AS 'Data',(SELECT NAME AS DATA from @TMP FOR XML PATH(''),TYPE,ELEMENTS)from @TMP GROUP BY IDFOR XML PATH('Result'),TYPE),(SELECT ID AS 'Data',(SELECT ISNULL(VALUE,'') AS DATA from @TMP FOR XML PATH(''),TYPE,ELEMENTS)from @TMP GROUP BY IDFOR XML PATH('Result'),TYPE)FROM @TMP GROUP BY IDFOR XML PATH(''),ROOT('Results'),TYPE-- SHOWS NULL/EMPTY VALUES AS <DATA></DATA> AS AGAINST ABOVE <DATA />. WHY IS THIS?SELECT ISNULL(VALUE,'') AS DATA from @TMP FOR XML PATH('')Can someone let me know how XML decides to build <DATA></DATA> or <DATA /> for NULL/blank values. Also I read here:http://beyondrelational.com/blogs/jacob/archive/2008/08/21/for-xml-path-generating-an-element-having-null-value.aspxhow to handle NULLS. How does this differ from using ISNULL as used above?--------------------Rock n Roll with SQL |
 |
|
|
|
|
|
|