ASP.NET에서 중첩 FOR XML 쿼리 사용Use Nested FOR XML Queries in ASP.NET

이 예에서ASP.NET 응용 프로그램은 SQL Server에서 저장 프로시저를 실행하여 브라우저에 XML을 반환합니다.In this example, an ASP.NET application returns XML to a browser by executing a stored procedure in SQL Server. 저장 프로시저는 중첩 쿼리를 사용하여 XML을 생성합니다.The stored procedure generates XML using nested queries. 유사한 SELECT 문은 중첩 AUTO 모드 쿼리를 사용하여 형제 생성항목에 설명되어 있습니다.A similar SELECT statement is shown in the topic Generating Siblings by Using a Nested AUTO Mode Query. 다음 예에서는 중첩 FOR XML 쿼리를 사용하여 SQL ServerSQL Server에 요소 중심 XML을 생성하는 한 가지 방법을 보여 줍니다.This example demonstrates one way to use nested FOR XML queries to generate element-centric XML in SQL ServerSQL Server.

예제Example

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 응용 프로그램입니다.This is the .aspx application. 이 코드는 저장 프로시저를 실행하고 브라우저에 XML을 반환합니다.It executes the stored procedure and returns XML in the browser:

<%@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();  
}  
%>  
응용 프로그램을 테스트하려면To test the application
  1. AdventureWorks2012AdventureWorks2012 데이터베이스에 저장 프로시저를 만듭니다.Create the stored procedure in the AdventureWorks2012AdventureWorks2012 database.

  2. .aspx 응용 프로그램을 c:\inetpub\wwwroot 디렉터리에 GetSalesOrderInfo.aspx로 저장합니다.Save the .aspx application in the c:\inetpub\wwwroot directory (GetSalesOrderInfo.aspx).

  3. 응용 프로그램(http://server/GetSalesOrderInfo.aspx)을 실행합니다.Execute the application (http://server/GetSalesOrderInfo.aspx).

관련 항목:See Also

중첩 FOR XML 쿼리 사용Use Nested FOR XML Queries