XML Tutorial
XML Tutorial
1. Write a query that returns the employee ID, first name, last name, and hire date. Return
the output in the datatype NVARCHAR and all data as simply attributes.
SELECT EmployeeID, FirstName, LastName, HireDate
FROM Employees FOR XML AUTO
Output:
<Employees EmployeeID="101" FirstName="James" LastName="Hinkle" HireDate="2006-01-01T00:00:00"/>
<Employees EmployeeID="102" FirstName="Dave" LastName="McCracken" HireDate="2006-01-04T00:00:00"/>
<Employees EmployeeID="103" FirstName="Phil" LastName="Johnson" HireDate="2006-01-05T00:00:00"/>
<Employees EmployeeID="120" FirstName="Clarice" LastName="Starling" HireDate="2006-02-28T00:00:00"/>
2. Write a query that returns the employee ID, first name, last name, and hire date. Return the
output in the XML datatype and all data as simply attributes.
SELECT EmployeeID, FirstName, LastName, HireDate
FROM Employees FOR XML AUTO, TYPE
Output:
<Employees EmployeeID="101" FirstName="James" LastName="Hinkle" HireDate="2006-01-01T00:00:00"/>
<Employees EmployeeID="102" FirstName="Dave" LastName="McCracken" HireDate="2006-01-04T00:00:00"/>
<Employees EmployeeID="103" FirstName="Phil" LastName="Johnson" HireDate="2006-01-05T00:00:00"/>
<Employees EmployeeID="120" FirstName="Clarice" LastName="Starling" HireDate="2006-02-28T00:00:00"/>
3. Write a query that returns the employee ID, first name, last name, and hire date. Return the
output in the XML datatype and the data as nodes (elements).
SELECT EmployeeID, FirstName, LastName, HireDate
FROM Employees FOR XML AUTO, TYPE, ELEMENTS
Output:
<Employees>
<EmployeeID>101</EmployeeID>
<FirstName>James</FirstName>
<LastName>Hinkle</LastName>
<HireDate>2006-01-01T00:00:00</HireDate>
</Employees>
<Employees>
<EmployeeID>102</EmployeeID>
<FirstName>Dave</FirstName>
<LastName>McCracken</LastName>
<HireDate>2006-01-04T00:00:00</HireDate>
</Employees>
<Employees>
<EmployeeID>103</EmployeeID>
<FirstName>Phil</FirstName>
<LastName>Johnson</LastName>
<HireDate>2006-01-05T00:00:00</HireDate>
</Employees>
4. Write a query that returns the employee ID, first name, last name, and hire date. Return the
output in the XML datatype, the data as nodes (elements), and a root element.
Output:
<root>
<Employees>
<EmployeeID>100</EmployeeID>
<FirstName>McKelly </FirstName>
<LastName>Peart </LastName>
<HireDate>2007-04-04T00:00:00</HireDate>
</Employees>
<Employees>
<EmployeeID>101</EmployeeID>
<FirstName>James </FirstName>
<LastName>Hinkle </LastName>
<HireDate>2006-01-01T00:00:00</HireDate>
</Employees>
</root>
5. Write a query that returns the employee ID, first name, last name, and hire date. Return the output
in the XML datatype, the data as nodes (elements), and a root tag named EmployeesInfo.
Output:
<EmployeesInfo>
<Employees>
<EmployeeID>100</EmployeeID>
<FirstName>McKelly </FirstName>
<LastName>Peart </LastName>
<HireDate>2007-04-04T00:00:00</HireDate>
</Employees>
<Employees>
<EmployeeID>101</EmployeeID>
<FirstName>James </FirstName>
<LastName>Hinkle </LastName>
<HireDate>2006-01-01T00:00:00</HireDate>
</Employees>
</Employees>
</EmployeesInfo>
6. Write a query that returns the employee ID, first name, last name, and hire date renamed as
DateHired. Return the output in the XML datatype, the data as nodes (elements), and a root tag
named EmployeesInfo.
Output:
<EmployeesInfo>
<Employees>
<EmployeeID>100</EmployeeID>
<FirstName>McKelly </FirstName>
<LastName>Peart </LastName>
<DateHired>2007-04-04T00:00:00</DateHired>
</Employees>
<Employees>
<EmployeeID>101</EmployeeID>
<FirstName>James </FirstName>
<LastName>Hinkle </LastName>
<DateHired>2006-01-01T00:00:00</DateHired>
</Employees>
<Employees>
</EmployeesInfo>
7. Write a query that returns the employee ID, first name, last name, and hire date renamed as
DateHired. Return the output in the XML datatype, the data as nodes (elements), and a root tag
named EmployeesInfo. Return tags even if an element has a NULL value.
Output:
<EmployeesInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Employees>
<EmployeeID>100</EmployeeID>
<FirstName>McKelly </FirstName>
<LastName>Peart </LastName>
<DateHired>2007-04-04T00:00:00</DateHired>
<SupervisorsID xsi:nil="true" />
</Employees>
<Employees>
<EmployeeID>101</EmployeeID>
<FirstName>James </FirstName>
<LastName>Hinkle </LastName>
<DateHired>2006-01-01T00:00:00</DateHired>
<SupervisorsID xsi:nil="true" />
</Employees>
<Employees>
<EmployeeID>102</EmployeeID>
<FirstName>Jess </FirstName>
<LastName>Long </LastName>
<DateHired>2007-05-01T00:00:00</DateHired>
<SupervisorsID>100</SupervisorsID>
</Employees>
</EmployeesInfo>
8. List an employee’s ID and then all phone numbers belonging to that employee. Each employee’s
ID should be listed even if they do not have a phone number.
SELECT 1 AS TAG,
NULL AS PARENT,
EmployeeID AS "Employees!1!EmployeeID",
NULL AS "PhoneNumbers!2!PhoneNumber"
FROM Employees
UNION ALL
SELECT 2,
1,
e.EmployeeID,
PhoneNumber
FROM Employees AS e JOIN PhoneNumbers AS ph ON
(e.EmployeeID = ph.EmployeeID)
ORDER BY [Employees!1!EmployeeID],[PhoneNumbers!2!Phonenumber]
FOR XML EXPLICIT
Output:
<Employees EmployeeID="100">
<PhoneNumbers PhoneNumber="(435) 512-8771 " />
</Employees>
<Employees EmployeeID="101">
<PhoneNumbers PhoneNumber="(435) 770-4291 " />
<PhoneNumbers PhoneNumber="(435) 792-3833 " />
</Employees>
<Employees EmployeeID="102" />
<Employees EmployeeID="103">
<PhoneNumbers PhoneNumber="(435) 543-6857 " />
<PhoneNumbers PhoneNumber="(435) 654-6546 " />
</Employees>
<Employees EmployeeID="104">
<PhoneNumbers PhoneNumber="(435) 354-6548 " />
</Employees>
<Employees EmployeeID="105">
<PhoneNumbers PhoneNumber="(435) 324-6546 " />
<PhoneNumbers PhoneNumber="(801) 655-5851 " />
</Employees>
<Employees EmployeeID="106">
<PhoneNumbers PhoneNumber="(435) 354-9846 " />
</Employees>
<Employees EmployeeID="107">
<PhoneNumbers PhoneNumber="(358) 683-6843 " />
</Employees>
<Employees EmployeeID="108">
<PhoneNumbers PhoneNumber="(025) 764-9634 " />
</Employees>
<Employees EmployeeID="109" />
<Employees EmployeeID="110">
<PhoneNumbers PhoneNumber="(435) 678-2344 " />
<PhoneNumbers PhoneNumber="(896) 654-3218 " />
</Employees>
<Employees EmployeeID="114" />
<Employees EmployeeID="120" />
<Employees EmployeeID="121" />
<Employees EmployeeID="122" />
<Employees EmployeeID="123" />
<Employees EmployeeID="124" />
<Employees EmployeeID="1001" />
<Employees EmployeeID="1002" />
<Employees EmployeeID="1003" />
<Employees EmployeeID="1004" />
<Employees EmployeeID="1005" />
<Employees EmployeeID="1006" />
<Employees EmployeeID="1007" />
<Employees EmployeeID="1008" />
<Employees EmployeeID="1009" />
<Employees EmployeeID="1010" />
9. List the employeeID and the begindates of an assignment for those employees that have an
assignment. Then list the AssignmentDescriptions for those employees with an assignment. All
employee ID’s should be listed even if they are not assigned. Assignment begin dates and
assignment descriptions should be nested inside an employee’s ID.
FROM Employees
FOR XML PATH('Employees')
Output:
<Employees EmployeeID="100" />
<Employees EmployeeID="101">
<EmpAssignments BeginDate="2006-01-05T00:00:00" />
<EmpAssignments BeginDate="2006-01-01T00:00:00" />
<EmpAssignments BeginDate="2007-01-01T00:00:00" />
<Assignments AssignmentDescription="International Sales Plan" />
<Assignments AssignmentDescription="National Sales Plan" />
<Assignments AssignmentDescription="Work for next to nothing" />
</Employees>
<Employees EmployeeID="102" />
<Employees EmployeeID="103" />
<Employees EmployeeID="104" />
<Employees EmployeeID="105">
<EmpAssignments BeginDate="2006-01-09T00:00:00" />
<Assignments AssignmentDescription="pay postage" />
</Employees>
<Employees EmployeeID="106" />
<Employees EmployeeID="107" />
<Employees EmployeeID="108" />
<Employees EmployeeID="109">
<EmpAssignments BeginDate="2006-01-15T00:00:00" />
<Assignments AssignmentDescription="Work for next to nothing" />
</Employees>
<Employees EmployeeID="110" />
<Employees EmployeeID="114" />
<Employees EmployeeID="120" />
10. Write a query that returns the employee ID, the BeginDate of the assignment for an
employee with an assignment as well as the assignment description. Return the data as nodes
(elements), and a root tag named EmployeesInfo.
SELECT Employees.EmployeeID, BeginDate,AssignmentDescription
FROM Employees LEFT JOIN EmployeeAssignment ON
(Employees.EmployeeID = EmployeeAssignment.EmployeeID)
LEFT JOIN Assignments ON
(EmployeeAssignment.AssignmentID= Assignments.AssignmentID)
FOR XML AUTO,TYPE, ELEMENTS, ROOT('EmployeesInfo');
<EmployeesInfo>
<Employees>
<EmployeeID>100</EmployeeID>
<EmployeeAssignment>
<Assignments />
</EmployeeAssignment>
</Employees>
<Employees>
<EmployeeID>101</EmployeeID>
<EmployeeAssignment>
<BeginDate>2006-01-05T00:00:00</BeginDate>
<Assignments>
<AssignmentDescription>National Sales Plan
</AssignmentDescription>
</Assignments>
</EmployeeAssignment>
<EmployeeAssignment>
<BeginDate>2006-01-01T00:00:00</BeginDate>
<Assignments>
<AssignmentDescription>International Sales Plan
</AssignmentDescription>
</Assignments>
</EmployeeAssignment>
<EmployeeAssignment>
<BeginDate>2007-01-01T00:00:00</BeginDate>
<Assignments>
<AssignmentDescription>Work for next to nothing
</AssignmentDescription>
</Assignments>
</EmployeeAssignment>
</Employees>
</EmployeesInfo>