Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL-Datenbank
Verwaltete Azure SQL-Instanz
SQL-Datenbank in Microsoft Fabric
Mithilfe von FOR XML-Klauseln mit SQL-Abfragen können Sie Abfrageergebnisse als XML-Daten abrufen und umwandeln. Wenn Sie FOR XML-Abfrageergebnisse in XML-Anwendungscode verwenden, können Sie:
Abfragen von SQL-Tabellen nach Instanzen von XML-Datenwerten (SQL Server)
Wenden Sie die TYPE Directive in FOR XML Queries an, um das Ergebnis von Abfragen zurückzugeben, die typisierte Text- oder Imagedaten als XML enthalten.
Dieser Artikel enthält Beispiele und veranschaulicht diese Vorgehensweisen.
Abruf von FOR XML-Daten mit ADO und XML-Dateninseln
Das ADO Stream-Objekt oder andere Objekte, die die COM-IStream-Schnittstelle unterstützen, z. B. die ASP-Anforderungs - und Antwortobjekte , können die Ergebnisse enthalten, wenn Sie mit FOR XML-Abfragen arbeiten.
Der folgende ASP-Code zeigt z. B. die Ergebnisse der Abfrage der xml-Datentypspalte Demographics in der Sales.Store-Tabelle der AdventureWorks-Beispieldatenbank. Insbesondere sucht die Abfrage nach dem Instanzwert dieser Spalte für die Zeile, in der die CustomerID gleich 3 ist.
<!-- 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 -->
Diese ASP-Beispielseite enthält serverseitiges VBScript, das ADO zum Ausführen der FOR XML-Abfrage und zum Zurückgeben der XML-Ergebnisse in einer XML-Dateninsel (MyDataIsle) verwendet. Der Browser empfängt dann diese XML-Dateninsel für zusätzliche clientseitige Verarbeitung. Zusätzlicher clientseitiger VBScript-Code verarbeitet dann den Inhalt der XML-Dateninsel, zeigt den Inhalt als Teil des resultierenden DHTML an und öffnet ein Meldungsfeld, um den vorverarbeiteten Inhalt der XML-Dateninsel anzuzeigen.
Testen Sie dieses Beispiel
Stellen Sie sicher, dass IIS und die AdventureWorks-Beispieldatenbank für SQL Server installiert sind.
In diesem Beispiel sind Internetinformationsdienste (IIS) Version 5.0 oder höher mit aktivierter ASP-Unterstützung erforderlich. Die AdventureWorks-Beispieldatenbank muss ebenfalls installiert werden.
Kopieren Sie das vorangehende Codebeispiel, und fügen Sie es in den von Ihnen verwendeten XML- oder Text-Editor ein. Speichern Sie die Datei als RetrieveResults.asp im von IIS verwendeten Stammverzeichnis. In der Regel ist dieses Verzeichnis C:Inetpub\wwwroot.
Öffnen Sie die ASP-Seite in einem Browserfenster, indem Sie die folgende URL verwenden. Ersetzen Sie zunächst 'MyServer' entweder durch "localhost" oder durch den tatsächlichen Namen des Servers, auf dem SQL Server und IIS installiert sind.
https://MyServer/RetrieveResults.asp
Die generierten HTML-Seitenergebnisse, die angezeigt werden, ähneln der folgenden Beispielausgabe:
Serverseitiges Verarbeiten
Page Generated @ 3/11/2006 3:36:02 PM
Connect String = Provider=SQLOLEDB;Data Source=MyServer;Initial Catalog=AdventureWorks;Integrated Security=SSPI;
ADO Version = 2.8
adoConn.State = 1
Query String = SELECT Demographics from Sales.Store WHERE CustomerID = 3 FOR XML AUTO
Pushing XML to client for processing
Clientseitiges Verarbeiten von XML-Dokument MyDataIsle
AnnualSales: 1500000
AnnualRevenue: 150000
BankName: Primär international
BusinessType: OS
YearOpened: 1974
Bereich: Straßenbau
SquareFeet: 38000
Marken: 3
Internet: DSL
NumberEmployees: 40
Das VBScript-Meldungsfeld zeigt dann den folgenden ursprünglichen, ungefilterten Inhalt der XML-Dateninsel, der durch die Ergebnisse der FOR XML-Abfrage zurückgegeben wurde.
<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>
Abrufen der FOR XML-Daten mit ASP.NET und .NET Framework
Wie im vorherigen Beispiel zeigt der folgende ASP.NET Code die Ergebnisse der Abfrage einer XML-Datentypspalte , Demografie, in der Sales.Store Tabelle der AdventureWorks-Beispieldatenbank. Und wie im vorherigen Beispiel sucht die Abfrage nach dem Instanzwert dieser Spalte für die Zeile, in der die CustomerID gleich 3 ist.
In diesem Beispiel geben die folgenden von Microsoft .NET Framework verwalteten APIs die FOR XML-Abfrageergebnisse zurück und rendern sie:
SqlConnection öffnet eine Verbindung mit SQL Server, basierend auf dem Inhalt einer angegebenen Verbindungszeichenfolgenvariable,
strConn.SqlDataAdapter dient als Datenadapter und verwendet die SQL-Verbindung und eine angegebene SQL-Abfragezeichenfolge, um die FOR XML-Abfrage auszuführen.
Nach der Ausführung der Anfrage füllt die SqlDataAdapter.Fill-Methode eine Instanz von DataSet mit der Ausgabe der FOR XML-Abfrage
MyDataSetaus.Die DataSet.GetXml-Methode gibt die Abfrageergebnisse als Zeichenfolge zurück, die von der servergenerierten HTML-Seite angezeigt wird.
<%@ 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 Microsoft.Data.SqlClient.SqlConnection(strConn) Dim MySqlAdapter As New Microsoft.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>
Testen Sie dieses Beispiel
Stellen Sie sicher, dass IIS und die AdventureWorks-Beispieldatenbank für SQL Server installiert sind.
In diesem Beispiel sind Internetinformationsdienste (IIS) Version 5.0 oder höher erforderlich, wobei ASP.NET Unterstützung aktiviert ist. Die AdventureWorks-Beispieldatenbank muss ebenfalls installiert werden.
Kopieren Sie den vorherigen Code, und fügen Sie ihn in den von Ihnen verwendeten XML- oder Text-Editor ein. Speichern Sie die Datei als RetrieveResults.aspx im von IIS verwendeten Stammverzeichnis. In der Regel ist dieses Verzeichnis C:Inetpub\wwwroot.
Öffnen Sie die ASP.NET Seite in einem Browserfenster mithilfe der folgenden URL. Ersetzen Sie zunächst 'MyServer' entweder durch "localhost" oder durch den tatsächlichen Namen des Servers, auf dem SQL Server und IIS installiert sind.
https://MyServer/RetrieveResults.aspx
Die generierten HTML-Seitenergebnisse, die angezeigt werden, ähneln der folgenden Beispielausgabe:
Serverseitiges Verarbeiten
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.
Hinweis
Mit der SQL Server-XML-Datentypunterstützung können Sie anfordern, dass eine FOR XML-Abfrage Ergebnisse als XML-Datentyp zurückgibt, anstatt als Zeichenfolgen- oder Bildtypdaten, indem Sie die TYPE-Direktive angeben. Wenn Sie die TYPE-Direktive in FOR XML-Abfragen verwenden, bietet sie programmgesteuerten Zugriff auf die FOR XML-Ergebnisse, ähnlich wie bei verwendung von XML-Daten in Anwendungen.