응용 프로그램 코드에서 FOR XML 결과 사용Use FOR XML Results in Application Code

SQL 쿼리에서 FOR XML 절을 사용하면 쿼리 결과 검색은 물론 XML 데이터로 캐스팅할 수도 있습니다.By using FOR XML clauses with SQL queries, you can retrieve and even cast query results as XML data. 이 기능을 사용하면 XML 응용 프로그램 코드에서 FOR XML 쿼리 결과를 사용할 수 있을 때 다음을 수행할 수 있습니다.This functionality allows you to do the following when FOR XML query results can be used in XML application code:

  • SQL 테이블에서 XML 데이터(SQL Server) 값 인스턴스를 쿼리합니다.Query SQL tables for instances of XML Data (SQL Server) values

  • TYPE Directive in FOR XML Queries 을 적용하여 XML 유형의 텍스트 또는 이미지 형식의 데이터를 포함하는 쿼리 결과를 반환합니다.Apply the TYPE Directive in FOR XML Queries to return the result of queries that contain text or image typed data as XML

    이 항목에서는 이러한 접근 방식을 보여 주는 예를 제공합니다.This topic provides examples that demonstrate these approaches.

ADO 및 XML 데이터 아일랜드로 FOR XML 데이터 검색Retrieving FOR XML Data with ADO and XML Data Islands

ADO Stream 개체나 ASP(Active Server Pages) RequestResponse 개체와 같이 COM IStream 인터페이스를 지원하는 다른 개체를 사용하여 FOR XML 쿼리를 사용할 때 결과를 포함시킬 수 있습니다.The ADO Stream object or other objects that support the COM IStream interface, such as the Active Server Pages (ASP) Request and Response objects, can be used to contain the results when you are working with FOR XML queries.

예를 들어 다음 ASP 코드에서는 AdventureWorks 예제 데이터베이스의 Sales.Store 테이블에서 xml 데이터 형식의 열인 Demographics를 쿼리한 결과를 보여 줍니다.For example, the following ASP code shows the results of querying an xml data type column, Demographics, in the Sales.Store table of the AdventureWorks sample database. 특히 이 쿼리는 이 열의 항목 값에서 CustomerID가 3인 행을 검색합니다.Specifically, the query looks for the instance value of this column for the row where the CustomerID is equal to 3.

<!-- BeginRecordAndStreamVBS -->  
<%@ LANGUAGE = VBScript %>  
<!-- %  Option Explicit      % -->  
<!-- 'Request.ServerVariables("SERVER_NAME") & ";" & _ -->  
<HTML>  
<HEAD>  
<META NAME="GENERATOR" Content="Microsoft Developer Studio"/>  
<META HTTP-EQUIV="Content-Type" content="text/html"; charset="iso-8859-1">  
<TITLE>FOR XML Query Example</TITLE>  
<STYLE>  
   BODY  
   {  
      FONT-FAMILY: Tahoma;  
      FONT-SIZE: 8pt;  
      OVERFLOW: auto  
   }  
   H3  
   {  
      FONT-FAMILY: Tahoma;  
      FONT-SIZE: 8pt;  
      OVERFLOW: auto  
   }  
</STYLE>  

<!-- #include file="adovbs.inc" -->  
<%  
   Response.Write "<H3>Server-side processing</H3>"  
   Response.Write "Page Generated @ " & Now() & "<BR/>"  
   Dim adoConn  
   Set adoConn = Server.CreateObject("ADODB.Connection")  
   Dim sConn  
   sConn = "Provider=SQLOLEDB;Data Source=(local);" & _  
            "Initial Catalog=AdventureWorks;Integrated Security=SSPI;"  
   Response.write "Connect String = " & sConn & "<BR/>"  
   adoConn.ConnectionString = sConn  
   adoConn.CursorLocation = adUseClient  
   adoConn.Open  
   Response.write "ADO Version = " & adoConn.Version & "<BR/>"  
   Response.write "adoConn.State = " & adoConn.State & "<BR/>"  
   Dim adoCmd  
   Set adoCmd = Server.CreateObject("ADODB.Command")  
   Set adoCmd.ActiveConnection = adoConn  
   Dim sQuery  
   sQuery = "<ROOT xmlns:sql='urn:schemas-microsoft-com:xml-sql'><sql:query>SELECT Demographics from Sales.Store WHERE CustomerID = 3 FOR XML AUTO</sql:query></ROOT>"  
   Response.write "Query String = " & sQuery & "<BR/>"  
   Dim adoStreamQuery  
   Set adoStreamQuery = Server.CreateObject("ADODB.Stream")  
   adoStreamQuery.Open  
   adoStreamQuery.WriteText sQuery, adWriteChar  
   adoStreamQuery.Position = 0  
   adoCmd.CommandStream = adoStreamQuery  
   adoCmd.Dialect = "{5D531CB2-E6Ed-11D2-B252-00C04F681B71}"  
   Response.write "Pushing XML to client for processing "  & "<BR/>"  
   adoCmd.Properties("Output Stream") = Response  
   Response.write "<XML ID='MyDataIsle'>"  
   adoCmd.Execute , , 1024  
   Response.write "</XML>"  
%>  
<SCRIPT language="VBScript" For="window" Event="onload">  
   Dim xmlDoc  
   Set xmlDoc = MyDataIsle.XMLDocument  
   Dim root  
   Set root = xmlDoc.documentElement.childNodes.Item(0).childNodes.Item(0).childNodes.Item(0)  
   For each child in root.childNodes  
      dim OutputXML  
      OutputXML = document.all("log").innerHTML  
      document.all("log").innerHTML = OutputXML & "<LI><B>" & child.nodeName &  ":</B>  " & child.Text  & "</LI>"  
   Next  
   MsgBox xmlDoc.xml  
</SCRIPT>  
</HEAD>  
<BODY>  
   <H3>Client-side processing of XML Document MyDataIsle</H3>  
   <UL id=log>  
   </UL>  
</BODY>  
</HTML>  
<!-- EndRecordAndStreamVBS -->  

이 ASP 페이지 예에는 ADO를 사용하여 FOR XML 쿼리를 실행하고 XML 데이터 아일랜드인 MyDataIsle로 XML 결과를 반환하는 서버 쪽 VBScript가 포함됩니다.This example ASP page contains server-side VBScript that uses ADO to execute the FOR XML query and return the XML results in an XML data island, MyDataIsle. 이 XML 데이터 아일랜드는 추가 클라이언트 쪽 처리를 위해 브라우저에 반환됩니다.This XML data island is then returned in the browser for additional client-side processing. 그런 다음 추가 클라이언트 쪽 VBScript 코드를 사용하여 XML 데이터 아일랜드의 콘텐츠를 처리합니다.Additional client-side VBScript code is then used to process the contents of the XML data island. 이 프로세스는 콘텐츠를 결과 DHTML의 일부로 표시하고 XML 데이터 아일랜드의 처리된 콘텐츠를 표시하는 메시지 상자를 열기 전에 수행됩니다.This process is performed before displaying the contents as part of the resultant DHTML and opening a message box to show the preprocessed contents of the XML data island.

이 예를 테스트하려면To test this example

  1. IIS가 설치되어 있으며 SQL ServerSQL Server 에 대한 AdventureWorks 예제 데이터베이스가 설치되었는지 확인합니다.Verify that IIS is installed and that the AdventureWorks sample database for SQL ServerSQL Server has been installed.

    이 예에서는 ASP 지원이 설정된 인터넷 정보 서비스(IIS) 버전 5.0 이상이 설치되어 있어야 합니다.This example requires that Internet Information Services (IIS) version 5.0, or later versions, are installed with ASP support enabled. 또한 AdventureWorks 예제 데이터베이스가 설치되어 있어야 합니다.Also, the AdventureWorks sample database has to be installed.

  2. 이전에 제공된 코드 예를 복사하여 사용하는 XML 또는 텍스트 편집기에 붙여 넣습니다.Copy the code example that was previously provided and paste it into the XML or text editor that you use. IIS에 사용되는 루트 디렉터리에 파일을 RetrieveResults.asp로 저장합니다.Save the file as RetrieveResults.asp in the root directory that is used for IIS. 일반적으로 루트 디렉터리의 위치는 C:\Inetpub\wwwroot입니다.Typically, this is C:Inetpub\wwwroot.

  3. 다음 URL을 사용하여 브라우저 창에서 ASP 페이지를 엽니다.Open the ASP page in a browser window by using the following URL. 먼저 'MyServer'를 "localhost" 또는 SQL ServerSQL Server 와 IIS가 설치된 서버의 실제 이름으로 바꿉니다.First, replace 'MyServer' with either "localhost" or the actual name of the server where SQL ServerSQL Server and IIS are installed.

    http://MyServer/RetrieveResults.asp  
    

    생성된 HTML 페이지 결과는 다음 예제 출력과 유사하게 표시됩니다.The generated HTML page results that appear will be similar to the following sample output:

서버 쪽 처리Server-side processing

Page Generated @ 3/11/2006 3:36:02 PMPage Generated @ 3/11/2006 3:36:02 PM

Connect String = Provider=SQLOLEDB;Data Source=MyServer;Initial Catalog=AdventureWorks;Integrated Security=SSPI;Connect String = Provider=SQLOLEDB;Data Source=MyServer;Initial Catalog=AdventureWorks;Integrated Security=SSPI;

ADO Version = 2.8ADO Version = 2.8

adoConn.State = 1adoConn.State = 1

Query String = SELECT Demographics from Sales.Store WHERE CustomerID = 3 FOR XML AUTOQuery String = SELECT Demographics from Sales.Store WHERE CustomerID = 3 FOR XML AUTO

Pushing XML to client for processingPushing XML to client for processing

XML 문서 MyDataIsle의 클라이언트 쪽 처리Client-side processing of XML Document MyDataIsle
  • AnnualSales: 1500000AnnualSales: 1500000

  • AnnualRevenue: 150000AnnualRevenue: 150000

  • BankName: Primary InternationalBankName: Primary International

  • BusinessType: OSBusinessType: OS

  • YearOpened: 1974YearOpened: 1974

  • Specialty: RoadSpecialty: Road

  • SquareFeet: 38000SquareFeet: 38000

  • Brands: 3Brands: 3

  • Internet: DSLInternet: DSL

  • NumberEmployees: 40NumberEmployees: 40

    그런 다음 VBScript 메시지 상자에 FOR XML 쿼리 결과에 의해 반환된 다음과 같은 원래의 필터링되지 않은 XML 데이터 아일랜드 콘텐츠가 표시됩니다.The VBScript message box will then show the following original, unfiltered XML data island contents that were returned by the FOR XML query results.

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
  <Sales.Store>  
    <Demographics>  
      <StoreSurvey xmlns="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/StoreSurvey">  
        <AnnualSales>1500000</AnnualSales>  
        <AnnualRevenue>150000</AnnualRevenue>  
        <BankName>Primary International</BankName>  
        <BusinessType>OS</BusinessType>  
        <YearOpened>1974</YearOpened>  
        <Specialty>Road</Specialty>  
        <SquareFeet>38000</SquareFeet>  
        <Brands>3</Brands>  
        <Internet>DSL</Internet>  
        <NumberEmployees>40</NumberEmployees>  
      </StoreSurvey>  
    </Demographics>  
  </Sales.Store>  
</ROOT>  

ASP.NET 및 .NET Framework에서 FOR XML 데이터 검색Retrieving FOR XML Data with ASP.NET and the .NET Framework

이전 예에서와 같이 다음 ASP.NET 코드에서는 AdventureWorks 예제 데이터베이스의 Sales.Store 테이블에서 xml 데이터 형식의 열인 Demographics를 쿼리한 결과를 보여 줍니다.As in the previous example, the following ASP.NET code shows the results of querying an xml data type column, Demographics, in the Sales.Store table of the AdventureWorks sample database. 이전 예에서와 같이 이 쿼리는 이 열의 항목 값에서 CustomerID가 3인 행을 검색합니다.As in the previous example, the query looks for the instance value of this column for the row where the CustomerID is equal to 3.

이 예에서는 다음 Microsoft .NET Framework 관리 API를 사용하여 FOR XML 쿼리 결과를 반환 및 렌더링합니다.In this example, the following Microsoft .NET Framework managed APIs are used to accomplish the return and rendering of the FOR XML query results:

  1. SqlConnection 을 사용하여 지정된 연결 문자열 변수인 strConn의 내용에 따라 SQL Server에 대한 연결을 엽니다.SqlConnection is used to open a connection to SQL Server, based on the contents of a specified connection string variable, strConn.

  2. 그런 다음SqlDataAdapter 를 데이터 어댑터로 사용하고 SQL 연결 및 지정된 SQL 쿼리 문자열을 사용하여 FOR XML 쿼리를 실행합니다.SqlDataAdapter is then used as the data adapter and it uses the SQL connection and a specified SQL query string to execute the FOR XML query.

  3. 쿼리가 실행된 다음 SqlDataAdapter.Fill 메서드를 호출하고 데이터 집합인 DataSet, MyDataSet의 해당 항목을 전달하여 데이터 집합에 FOR XML 쿼리 출력을 채웁니다.After the query has executed, the SqlDataAdapter.Fill method is then called and passed an instance of a DataSet, MyDataSet, in order to fill the data set with the output of the FOR XML query.

  4. 그런 다음 DataSet.GetXml 메서드를 호출하여 서버에서 생성된 HTML 페이지에 표시될 수 있는 문자열로 쿼리 결과를 반환합니다.The DataSet.GetXml method is then called to return the query results as a string that can be displayed in the server-generated HTML page.

    <%@ Page Language="VB" %>  
    <HTML>  
    <HEAD>  
    <TITLE>FOR XML Query Example</TITLE>  
    <STYLE>  
       BODY  
       {  
          FONT-FAMILY: Tahoma;  
          FONT-SIZE: 8pt;  
          OVERFLOW: auto  
       }  
       H3  
       {  
          FONT-FAMILY: Tahoma;  
          FONT-SIZE: 8pt;  
          OVERFLOW: auto  
       }  
    </STYLE>  
    </HEAD>  
    <BODY>  
    <%  
    Dim s as String  
    s = "<H3>Server-side processing</H3>" & _  
        "Page Generated @ " & Now() & "<BR/>"  
    
    Dim SQL As String   
    SQL = "SELECT Demographics from Sales.Store WHERE CustomerID = 3 FOR XML AUTO"  
    
    Dim strConn As String   
    strConn = "Server=(local);Database=AdventureWorks;Integrated Security=SSPI;"  
    
    Dim MySqlConn As New System.Data.SqlClient.SqlConnection(strConn)  
    Dim MySqlAdapter As New System.Data.SqlClient.SqlDataAdapter(SQL,MySqlConn)  
    Dim MyDataSet As New System.Data.DataSet  
    
    MySqlConn.Open()  
    s = s & "<P>SqlConnection opened.</P>"   
    
    MySqlAdapter.Fill(MyDataSet)  
    s = s & "<P>" & MyDataSet.GetXml  & "</P>"  
    
    MySqlConn.Close()  
    s = s & "<P>SqlConnection closed.</P>"   
    
    Message.InnerHtml=s  
    %>  
    <SPAN id="Message" runat=server />  
    </BODY>  
    </HTML>  
    

이 예를 테스트하려면To test this example

  1. IIS가 설치되어 있으며 SQL ServerSQL Server 에 대한 AdventureWorks 예제 데이터베이스가 설치되었는지 확인합니다.Verify that IIS is installed and that the AdventureWorks sample database for SQL ServerSQL Server has been installed.

    이 예에서는 ASP.NET 지원이 설정된 인터넷 정보 서비스(IIS) 버전 5.0 이상이 설치되어 있어야 합니다.This example requires that Internet Information Services (IIS) version 5.0, or later versions, are installed with ASP.NET support enabled. 또한 AdventureWorks 예제 데이터베이스가 설치되어 있어야 합니다.Also, the AdventureWorks sample database has to be installed.

  2. 이전에 제공된 코드를 복사하여 사용하는 XML 또는 텍스트 편집기에 붙여 넣습니다.Copy the code that was previously provided and paste it into the XML or text editor that you use. IIS에 사용되는 루트 디렉터리에 파일을 RetrieveResults.aspx로 저장합니다.Save the file as RetrieveResults.aspx in the root directory used for IIS. 일반적으로 루트 디렉터리의 위치는 C:\Inetpub\wwwroot입니다.Typically, this is C:Inetpub\wwwroot.

  3. 다음 URL을 사용하여 브라우저 창에서 ASP.NET 페이지를 엽니다.Open the ASP.NET page in a browser window using the following URL. 먼저 'MyServer'를 "localhost" 또는 SQL ServerSQL Server 와 IIS가 설치된 서버의 실제 이름으로 바꿉니다.First, replace 'MyServer' with either "localhost" or the actual name of the server where SQL ServerSQL Server and IIS are installed.

    http://MyServer/RetrieveResults.aspx  
    

    생성된 HTML 페이지 결과는 다음 예제 출력과 유사하게 표시됩니다.The generated HTML page results that appear will be similar to the following sample output:

서버 쪽 처리Server-side processing
Page Generated @ 3/11/2006 3:36:02 PM  

SqlConnection opened.  

<Sales.Store><Demographics><StoreSurvey xmlns="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/StoreSurvey"><AnnualSales>1500000</AnnualSales><AnnualRevenue>150000</AnnualRevenue><BankName>Primary International</BankName><BusinessType>OS</BusinessType><YearOpened>1974</YearOpened><Specialty>Road</Specialty><SquareFeet>38000</SquareFeet><Brands>3</Brands><Internet>DSL</Internet><NumberEmployees>40</NumberEmployees></StoreSurvey></Demographics></Sales.Store>  

SqlConnection closed.  
참고

SQL ServerSQL Serverxml 데이터 형식 지원을 통해 TYPE 지시어 를 지정하여 FOR XML 쿼리의 결과가 문자열이나 이미지 형식의 데이터 대신 [xml](../../relational-databases/xml/type-directive-in-for-xml-queries.md)데이터 형식으로 반환되도록 요청할 수 있습니다.The SQL ServerSQL Serverxml data type support lets you request that the result of a FOR XML query be returned as xml data type, instead of as string or image typed data, by specifying the TYPE directive. FOR XML 쿼리에서 TYPE 지시어가 사용된 경우 이 지시어는 응용 프로그램에서 XML 데이터 사용에 표시된 것과 비슷하게 FOR XML 결과에 대한 프로그래밍 방식의 액세스를 제공합니다.When the TYPE directive is used in FOR XML queries, it provides programmatic access to the FOR XML results similar to that shown in Use XML Data in Applications.

참고 항목See Also

FOR XML(SQL Server)FOR XML (SQL Server)