이 예제에서 ASP.NET 애플리케이션은 SQL Server에서 저장 프로시저를 실행하여 XML을 브라우저로 반환합니다. 저장 프로시저는 중첩된 쿼리를 사용하여 XML을 생성합니다. 중첩 AUTO 모드 쿼리를 사용하여 형제를 생성하는 항목에 유사한 SELECT 문이 표시되어 있습니다. 이 예제에서는 중첩된 FOR XML 쿼리를 사용하여 SQL Server에서 요소 중심 XML을 생성하는 한 가지 방법을 보여 줍니다.
예시
CREATE PROC GetSalesOrderInfo AS
SELECT
(SELECT top 2 SalesOrderID, SalesPersonID, CustomerID,
(select top 3 SalesOrderID, ProductID, OrderQty, UnitPrice
from Sales.SalesOrderDetail
WHERE SalesOrderDetail.SalesOrderID = SalesOrderHeader.SalesOrderID
FOR XML AUTO, TYPE)
FROM Sales.SalesOrderHeader
WHERE SalesOrderHeader.SalesOrderID = SalesOrder.SalesOrderID
for xml auto, type),
(SELECT *
FROM (SELECT SalesPersonID, EmployeeID
FROM Sales.SalesPerson, HumanResources.Employee
WHERE SalesPerson.SalesPersonID = Employee.EmployeeID) As SalesPerson
WHERE SalesPerson.SalesPersonID = SalesOrder.SalesPersonID
FOR XML AUTO, TYPE, ELEMENTS)
FROM (SELECT SalesOrderHeader.SalesOrderID, SalesOrderHeader.SalesPersonID
FROM Sales.SalesOrderHeader, Sales.SalesPerson
WHERE SalesOrderHeader.SalesPersonID = SalesPerson.SalesPersonID
) as SalesOrder
ORDER BY SalesOrder.SalesOrderID
FOR XML AUTO, TYPE
GO
이는 .aspx 애플리케이션입니다. 이 코드는 저장 프로시저를 실행하고 브라우저에 XML을 반환합니다.
<%@LANGUAGE=C# Debug=true %>
<%@import Namespace="System.Xml"%>
<%@import namespace="System.Data.SqlClient" %><%
Response.Expires = -1;
Response.ContentType = "text/xml";
%>
<%
using(System.Data.SqlClient.SqlConnection c = new System.Data.SqlClient.SqlConnection("Data Source=server;Database=AdventureWorks;Integrated Security=SSPI;"))
using(System.Data.SqlClient.SqlCommand cmd = c.CreateCommand())
{
cmd.CommandText = "GetSalesOrderInfo";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection.Open();
System.Xml.XmlReader r = cmd.ExecuteXmlReader();
System.Xml.XmlTextWriter w = new System.Xml.XmlTextWriter(Response.Output);
w.WriteStartElement("Root");
r.MoveToContent();
while(! r.EOF)
{
w.WriteNode(r, true);
}
w.WriteEndElement();
w.Flush();
}
%>
애플리케이션을 테스트하려면
AdventureWorks2012 데이터베이스에 저장 프로시저를 만듭니다.
.aspx 애플리케이션을 c:\inetpub\wwwroot 디렉터리(GetSalesOrderInfo.aspx)에 저장합니다.
애플리케이션 실행(https://server/GetSalesOrderInfo.aspx).