0% found this document useful (0 votes)
71 views

XML Tutorial

The document describes various SQL queries that return employee data in XML format. The queries demonstrate: 1. Returning data as simple attributes or elements 2. Adding a root element or tag 3. Renaming columns 4. Returning null values as elements 5. Listing related data like phone numbers nested within employee elements 6. Returning assignments nested within employee elements The queries show how to control and structure the output of XML data from a SQL database using different FOR XML options.

Uploaded by

David Olsen
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
71 views

XML Tutorial

The document describes various SQL queries that return employee data in XML format. The queries demonstrate: 1. Returning data as simple attributes or elements 2. Adding a root element or tag 3. Renaming columns 4. Returning null values as elements 5. Listing related data like phone numbers nested within employee elements 6. Returning assignments nested within employee elements The queries show how to control and structure the output of XML data from a SQL database using different FOR XML options.

Uploaded by

David Olsen
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 6

XML in SQL Server

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.

SELECT EmployeeID, FirstName, LastName, HireDate


FROM Employees FOR XML AUTO, TYPE, ELEMENTS, ROOT

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.

SELECT EmployeeID, FirstName, LastName, HireDate


FROM Employees FOR XML AUTO, TYPE, ELEMENTS, ROOT('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.

SELECT EmployeeID, FirstName, LastName, HireDate AS DateHired


FROM Employees FOR XML AUTO, TYPE, ELEMENTS, ROOT('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.

SELECT EmployeeID, FirstName, LastName, HireDate AS DateHired, SupervisorsID


FROM Employees FOR XML AUTO, TYPE, ELEMENTS XSINIL, ROOT('EmployeesInfo')

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.

SELECT EmployeeID as "@EmployeeID",


(SELECT BeginDate AS "@BeginDate"
FROM EmployeeAssignment
WHERE Employees.EmployeeID = EmployeeAssignment.EmployeeID
FOR XML PATH('EmpAssignments'), TYPE),

(SELECT DISTINCT AssignmentDescription as "@AssignmentDescription"


FROM Assignments
JOIN EmployeeAssignment ON
(Assignments.AssignmentID = EmployeeAssignment.AssignmentID)
WHERE (Employees.EmployeeID = EmployeeAssignment.EmployeeID)
FOR XML PATH('Assignments'), TYPE)

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>

You might also like