In a FOR XML clause, you specify one of these modes:
RAW - generates a single <row> element per row in the rowset that is returned by the SELECT statement
AUTO - generates nesting in the resulting XML by using heuristics based on the way the SELECT statement is specified
EXPLICIT - provides the most flexibility in generating the XML
PATH - a simpler alternative to writing EXPLICIT mode queries
Examples for RAW:
Query 1: Basic
SELECT doc_id ,
media_id
FROM DOC
FOR XML RAW
Result 1:
<row doc_id="114" media_id="-117" />
<row doc_id="115" media_id="-113" />
Query 2: Using Customized name instead of "row" in the result
SELECT doc_id ,
media_id
FROM DOC
FOR XML RAW('DOC')
Result 2:
<DOC doc_id="114" media_id="-117" />
<DOC doc_id="115" media_id="-113" />
Examples for AUTO:
Query 1: Basic
SELECT doc_id ,
media_id
FROM DOC
FOR XML AUTO
Result 1:
<DOC doc_id="114" media_id="-117" />
<DOC doc_id="115" media_id="-113" />
Note : If we specifies a four-part name in the query, the server name is not returned in the resulting XML document when the query is executed on the local computer. However, the server name is returned as the four-part name when the query is executed on a network server.
Query 2: Four Part Name
SELECT doc_id ,
media_id
FROM Server.Database.Owner.Table
FOR XML AUTO
Result 2:
<Server.Database.Owner.Table doc_id="114" media_id="-117" />
<Server.Database.Owner.Table doc_id="115" media_id="-113" />
Query 3: Using Alias
SELECT doc_id ,
media_id
FROM Server.Database.Owner.Table DOC
FOR XML AUTO
Result 3:
<DOC doc_id="114" media_id="-117" />
<DOC doc_id="115" media_id="-113" />
Examples for EXPLICIT:
Query 1: Basic
SELECT TOP 1
1 AS Tag , --- statements to be used as is
NULL AS Parent , --- statements to be used as is
E.Doc_Id AS [Layer1!1!Emp] , --- outer column
E.Custodian_Id AS [Layer2!2!Layer3!ELEMENT] --- inner column
FROM dbo.Doc AS E
UNION ALL
SELECT TOP 1
2 AS Tag , --- statements to be used as is
1 AS Parent , --- statements to be used as is
E.Doc_Id , --- outer column
E.Custodian_Id --- inner column
FROM dbo.Doc AS E
ORDER BY [Layer1!1!Emp] ,[Layer2!2!Layer3!ELEMENT] -- order by is very important to get a nested loop
FOR XML EXPLICIT ;
Result 1:
<Layer1 Emp="1569">
<Layer2>
<Layer3>0</Layer3>
</Layer2>
</Layer1>
Examples for PATH:
Query 1: Basic
SELECT doc_id ,
media_id
FROM dbo.Doc
FOR XML PATH('')
Result 1:
<doc_id>11491190</doc_id>
<media_id>-11737</media_id>
Query 2: Using Alias
SELECT doc_id ,
media_id
FROM dbo.Doc
FOR XML PATH('CustomerInfo') ;
Result 2:
<CustomerInfo>
<doc_id>11491190</edoc_id>
<media_id>-11737</media_id>
</CustomerInfo>
RAW - generates a single <row> element per row in the rowset that is returned by the SELECT statement
AUTO - generates nesting in the resulting XML by using heuristics based on the way the SELECT statement is specified
EXPLICIT - provides the most flexibility in generating the XML
PATH - a simpler alternative to writing EXPLICIT mode queries
Examples for RAW:
Query 1: Basic
SELECT doc_id ,
media_id
FROM DOC
FOR XML RAW
Result 1:
<row doc_id="114" media_id="-117" />
<row doc_id="115" media_id="-113" />
Query 2: Using Customized name instead of "row" in the result
SELECT doc_id ,
media_id
FROM DOC
FOR XML RAW('DOC')
Result 2:
<DOC doc_id="114" media_id="-117" />
<DOC doc_id="115" media_id="-113" />
Examples for AUTO:
Query 1: Basic
SELECT doc_id ,
media_id
FROM DOC
FOR XML AUTO
Result 1:
<DOC doc_id="114" media_id="-117" />
<DOC doc_id="115" media_id="-113" />
Note : If we specifies a four-part name in the query, the server name is not returned in the resulting XML document when the query is executed on the local computer. However, the server name is returned as the four-part name when the query is executed on a network server.
Query 2: Four Part Name
SELECT doc_id ,
media_id
FROM Server.Database.Owner.Table
FOR XML AUTO
Result 2:
<Server.Database.Owner.Table doc_id="114" media_id="-117" />
<Server.Database.Owner.Table doc_id="115" media_id="-113" />
Query 3: Using Alias
SELECT doc_id ,
media_id
FROM Server.Database.Owner.Table DOC
FOR XML AUTO
Result 3:
<DOC doc_id="114" media_id="-117" />
<DOC doc_id="115" media_id="-113" />
Examples for EXPLICIT:
Query 1: Basic
SELECT TOP 1
1 AS Tag , --- statements to be used as is
NULL AS Parent , --- statements to be used as is
E.Doc_Id AS [Layer1!1!Emp] , --- outer column
E.Custodian_Id AS [Layer2!2!Layer3!ELEMENT] --- inner column
FROM dbo.Doc AS E
UNION ALL
SELECT TOP 1
2 AS Tag , --- statements to be used as is
1 AS Parent , --- statements to be used as is
E.Doc_Id , --- outer column
E.Custodian_Id --- inner column
FROM dbo.Doc AS E
ORDER BY [Layer1!1!Emp] ,[Layer2!2!Layer3!ELEMENT] -- order by is very important to get a nested loop
FOR XML EXPLICIT ;
Result 1:
<Layer1 Emp="1569">
<Layer2>
<Layer3>0</Layer3>
</Layer2>
</Layer1>
Examples for PATH:
Query 1: Basic
SELECT doc_id ,
media_id
FROM dbo.Doc
FOR XML PATH('')
Result 1:
<doc_id>11491190</doc_id>
<media_id>-11737</media_id>
Query 2: Using Alias
SELECT doc_id ,
media_id
FROM dbo.Doc
FOR XML PATH('CustomerInfo') ;
Result 2:
<CustomerInfo>
<doc_id>11491190</edoc_id>
<media_id>-11737</media_id>
</CustomerInfo>
Comments
Post a Comment