Other FORXMLAUTO SQL function


1. Usage of FORMATXMLAUTO

SQL Server Query 1

            
 SELECT TOP 10  
c.CustomerID AS "@CustomerID", -- Prefixing with '@' makes it an attribute
c.CompanyName AS "@CompanyName",
o.OrderID AS "Order/@OrderID",
o.OrderDate AS "Order/@OrderDate"
FROM
Customers c
LEFT JOIN
Orders o ON c.CustomerID = o.CustomerID
WHERE c.Country = 'USA'
ORDER BY c.CustomerID, o.OrderID
FOR XML AUTO;

Create SQL query with SqlQueryBuilder 1

            
 var (sql1, parameters1) = new SqlQueryBuilder()  
.Select().Top(10)
.ColumnXml("c.CustomerID", "@CustomerID")
.ColumnXml("c.CompanyName", "@CompanyName")
.ColumnXml("o.OrderID", "Order/@OrderID")
.ColumnXml("o.OrderDate", "Order/@OrderDate")
.From("Customers", "c")
.Join(new List<IJoin>()
{
new INNERJOIN().TableName(new Table("Orders","o"))
.On(new Column("c.CustomerID").Equale(new Column("o.CustomerID")))
})
.Where(new Where(new Column("c.Country").Equale("USA")))
.OrderBy(new OrderBy().Set(new Column("c.CustomerID"))
.Set(new Column("o.OrderID")))
.ForXml(new FOR_XML_AUTO().ELEMENTS())
.Build();

Query build by SqlQueryBuilder 1

            
SELECT TOP 10 c.CustomerID AS '@CustomerID',
              c.CompanyName AS '@CompanyName',
              o.OrderID AS 'Order/@OrderID',
              o.OrderDate AS 'Order/@OrderDate'
FROM Customers AS c
     INNER JOIN
     Orders AS o
     ON c.CustomerID = o.CustomerID
WHERE c.Country = @pMAIN_2507192009574158980
ORDER BY c.CustomerID ASC, o.OrderID ASC
FOR XML AUTO, ELEMENTS;


            
        

Parameters (If used)

Name Value
@pMAIN_2507192009574158980 USA

Query Results 1:

  Col1
1 <c><_x0040_CustomerID>GREAL</_x0040_CustomerID><_x0040_CompanyName>Great Lakes Food Market</_x0040_CompanyName><o><Order_x002F__x0040_OrderID>10528</Order_x002F__x0040_OrderID><Order_x002F__x0040_OrderDate>1997-05-06T00:00:00</Order_x002F__x0040_OrderDate></o><o><Order_x002F__x0040_OrderID>10589</Order_x002F__x0040_OrderID><Order_x002F__x0040_OrderDate>1997-07-04T00:00:00</Order_x002F__x0040_OrderDate></o><o><Order_x002F__x0040_OrderID>10616</Order_x002F__x0040_OrderID><Order_x002F__x0040_OrderDate>1997-07-31T00:00:00</Order_x002F__x0040_OrderDate></o><o><Order_x002F__x0040_OrderID>10617</Order_x002F__x0040_OrderID><Order_x002F__x0040_OrderDate>1997-07-31T00:00:00</Order_x002F__x0040_OrderDate></o><o><Order_x002F__x0040_OrderID>10656</Order_x002F__x0040_OrderID><Order_x002F__x0040_OrderDate>1997-09-04T00:00:00</Order_x002F__x0040_OrderDate></o><o><Order_x002F__x0040_OrderID>10681</Order_x002F__x0040_OrderID><Order_x002F__x0040_OrderDate>1997-09-25T00:00:00</Order_x002F__x0040_OrderDate></o><o><Order_x002F__x0040_OrderID>10816</Order_x002F__x0040_OrderID><Order_x002F__x0040_OrderDate>1998-01-06T00:00:00</Order_x002F__x0040_OrderDate></o><o><Order_x002F__x0040_OrderID>10936</Order_x002F__x0040_OrderID><Order_x002F__x0040_OrderDate>1998-03-09T00:00:00</Order_x002F__x0040_OrderDate></o><o><Order_x002F__x0040_OrderID>11006</Order_x002F__x0040_OrderID><Order_x002F__x0040_OrderDate>1998-04-07T00:00:00</Order_x002F__x0040_OrderDate></o><o><Order_x002F__x0040_OrderID>11040</Order_x002F__x0040_OrderID><Order_x002F__x0040_OrderDate>1998-04-22T00:00:00</Order_x002F__x0040_OrderDate></o></c>


2. Usage of FORXMLAUTO

SQL Server Query 2

            
 SELECT TOP 10  
c.CustomerID AS "@CustomerID", -- Prefixing with '@' makes it an attribute
c.CompanyName AS "@CompanyName",
o.OrderID AS "Order/@OrderID",
o.OrderDate AS "Order/@OrderDate"
FROM
Customers c
LEFT JOIN
Orders o ON c.CustomerID = o.CustomerID
WHERE c.Country = 'USA'
ORDER BY c.CustomerID, o.OrderID
FOR XML AUTO, ELEMENTS;

Create SQL query with SqlQueryBuilder 2

            
 var (sql2, parameters2) = new SqlQueryBuilder()  
.Select().Top(10)
.ColumnXml("c.CustomerID", "@CustomerID")
.ColumnXml("c.CompanyName", "@CompanyName")
.ColumnXml("o.OrderID", "Order/@OrderID")
.ColumnXml("o.OrderDate", "Order/@OrderDate")
.From("Customers", "c")
.Join(new List<IJoin>()
{
new LEFTJOIN().TableName(new Table("Orders","o"))
.On(new Column("c.CustomerID").Equale(new Column("o.CustomerID")))
})
.Where(new Where(new Column("c.Country").Equale("USA")))
.OrderBy(new OrderBy().Set(new Column("c.CustomerID"))
.Set(new Column("o.OrderID")))
.ForXml(new FOR_XML_AUTO())
.Build();

Query build by SqlQueryBuilder 2

            
SELECT TOP 10 c.CustomerID AS '@CustomerID',
              c.CompanyName AS '@CompanyName',
              o.OrderID AS 'Order/@OrderID',
              o.OrderDate AS 'Order/@OrderDate'
FROM Customers AS c
     LEFT OUTER JOIN
     Orders AS o
     ON c.CustomerID = o.CustomerID
WHERE c.Country = @pMAIN_2507192009574300550
ORDER BY c.CustomerID ASC, o.OrderID ASC
FOR XML AUTO;


            
        

Parameters (If used)

Name Value
@pMAIN_2507192009574300550 USA

Query Results 2:

  Col1
1 <c><_x0040_CustomerID>GREAL</_x0040_CustomerID><_x0040_CompanyName>Great Lakes Food Market</_x0040_CompanyName><o><Order_x002F__x0040_OrderID>10528</Order_x002F__x0040_OrderID><Order_x002F__x0040_OrderDate>1997-05-06T00:00:00</Order_x002F__x0040_OrderDate></o><o><Order_x002F__x0040_OrderID>10589</Order_x002F__x0040_OrderID><Order_x002F__x0040_OrderDate>1997-07-04T00:00:00</Order_x002F__x0040_OrderDate></o><o><Order_x002F__x0040_OrderID>10616</Order_x002F__x0040_OrderID><Order_x002F__x0040_OrderDate>1997-07-31T00:00:00</Order_x002F__x0040_OrderDate></o><o><Order_x002F__x0040_OrderID>10617</Order_x002F__x0040_OrderID><Order_x002F__x0040_OrderDate>1997-07-31T00:00:00</Order_x002F__x0040_OrderDate></o><o><Order_x002F__x0040_OrderID>10656</Order_x002F__x0040_OrderID><Order_x002F__x0040_OrderDate>1997-09-04T00:00:00</Order_x002F__x0040_OrderDate></o><o><Order_x002F__x0040_OrderID>10681</Order_x002F__x0040_OrderID><Order_x002F__x0040_OrderDate>1997-09-25T00:00:00</Order_x002F__x0040_OrderDate></o><o><Order_x002F__x0040_OrderID>10816</Order_x002F__x0040_OrderID><Order_x002F__x0040_OrderDate>1998-01-06T00:00:00</Order_x002F__x0040_OrderDate></o><o><Order_x002F__x0040_OrderID>10936</Order_x002F__x0040_OrderID><Order_x002F__x0040_OrderDate>1998-03-09T00:00:00</Order_x002F__x0040_OrderDate></o><o><Order_x002F__x0040_OrderID>11006</Order_x002F__x0040_OrderID><Order_x002F__x0040_OrderDate>1998-04-07T00:00:00</Order_x002F__x0040_OrderDate></o><o><Order_x002F__x0040_OrderID>11040</Order_x002F__x0040_OrderID><Order_x002F__x0040_OrderDate>1998-04-22T00:00:00</Order_x002F__x0040_OrderDate></o></c>