Spalten mit einem Namen
Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance
Im Folgenden werden die spezifischen Bedingungen aufgeführt, unter denen dem XML-Ergebnis mit Unterscheidung nach Groß-/Kleinschreibung Rowsetspalten mit Namen zugeordnet werden:
Der Spaltenname beginnt mit einem At-Zeichen (
@
).Der Spaltenname beginnt nicht mit einem At-Zeichen (
@
).Der Spaltenname beginnt nicht mit einem At-Zeichen (
@
) und enthält ein Schrägstrich (/
).Mehrere Spalten verwenden dasselbe Präfix.
Eine Spalte hat einen unterschiedlichen Namen.
Spaltenname beginnt mit einem At-Zeichen (@
)
Wenn der Spaltenname mit einem At-Zeichen (@
) beginnt und kein Schrägstrich (/
) enthält, wird ein Attribut des row
Elements mit dem entsprechenden Spaltenwert erstellt. Die folgende Abfrage gibt z. B. ein Zeilensatz mit zwei Spalten zurück@PmId, Name
. Im resultierenden XML-Code wird dem entsprechenden Element ein PmId
Attribut hinzugefügt und ihm ein Wert ProductModelID
zugewiesen.row
SELECT ProductModelID as "@PmId",
Name
FROM Production.ProductModel
WHERE ProductModelID = 7
FOR XML PATH;
Dies ist das Ergebnis:
<row PmId="7">
<Name>HL Touring Frame</Name>
</row>
Attribute müssen vor allen anderen Knotentypen, z. B. Elementknoten und Textknoten, auf derselben Ebene erfolgen. Die folgende Abfrage gibt einen Fehler zurück:
SELECT Name,
ProductModelID as "@PmId"
FROM Production.ProductModel
WHERE ProductModelID = 7
FOR XML PATH;
Der Spaltenname beginnt nicht mit einem At-Zeichen (@
)
Wenn der Spaltenname nicht mit einem At-Zeichen (@
) beginnt, ist keiner der XPath-Knotentests und enthält kein Schrägstrich (/
), ein XML-Element, das ein Unterelement des Zeilenelements ist, row
standardmäßig erstellt wird.
Die folgende Abfrage gibt den Spaltennamen result an. Folglich wird dem row
-Element das untergeordnete result
-Element hinzugefügt.
SELECT 2 + 2 as result
for xml PATH;
Dies ist das Ergebnis:
<row>
<result>4</result>
</row>
Die folgende Abfrage gibt den Spaltennamen ManuWorkCenterInformation
für den von der XQuery angegebenen XML-Code für Instructions
die Spalte des XML-Typs an. Folglich wird dem row
-Element das untergeordnete ManuWorkCenterInformation
-Element hinzugefügt.
SELECT
ProductModelID,
Name,
Instructions.query(
'declare namespace MI="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
/MI:root/MI:Location
') as ManuWorkCenterInformation
FROM Production.ProductModel
WHERE ProductModelID=7
FOR XML PATH;
Dies ist das Ergebnis:
<row>
<ProductModelID>7</ProductModelID>
<Name>HL Touring Frame</Name>
<ManuWorkCenterInformation>
<MI:Location ...LocationID="10" ...></MI:Location>
<MI:Location ...LocationID="20" ...></MI:Location>
...
</ManuWorkCenterInformation>
</row>
Der Spaltenname beginnt nicht mit einem At-Zeichen (@
) und enthält ein Schrägstrich (/
)
Wenn der Spaltenname nicht mit einem At-Zeichen (@
) beginnt, aber ein Schrägstrich (/
) enthält, gibt der Spaltenname eine XML-Hierarchie an. Wenn der Spaltenname beispielsweise "Name1/Name2/Name3.../Namen" lautet, stellt jeder Namei einen Elementnamen dar, der im aktuellen Zeilenelement (für i = 1) geschachtelt ist oder sich unter dem Element befindet, das den Namen "i-1" aufweist. Wenn Namen beginnt, @
wird er einem Attribut des Namensn-1-Elements zugeordnet.
Die folgende Abfrage gibt z. B. eine Mitarbeiter-ID und einen Namen zurück, die als komplexes Element EmpName
dargestellt werden, das ein First
, Middle
und Last
einen Namen enthält.
SELECT EmployeeID "@EmpID",
FirstName "EmpName/First",
MiddleName "EmpName/Middle",
LastName "EmpName/Last"
FROM HumanResources.Employee E, Person.Contact C
WHERE E.EmployeeID = C.ContactID AND
E.EmployeeID = 1
FOR XML PATH;
Die Spaltennamen werden als Pfad für die Konstruktion des XML-Codes im PATH-Modus verwendet. Der Spaltenname, der Mitarbeiter-ID-Werte enthält, beginnt mit '@'. Daher wird dem row
Element ein Attribut EmpID
hinzugefügt. Alle anderen Spalten enthalten ein Schrägstrich (/
) im Spaltennamen, der die Hierarchie angibt. Im resultierenden XML-Code befindet sich das untergeordnete EmpName
-Element unter dem row
-Element, und das untergeordnete EmpName
-Element verfügt über die untergeordneten Elemente First
, Middle
und Last
.
<row EmpID="1">
<EmpName>
<First>Gustavo</First>
<Last>Achong</Last>
</EmpName>
</row>
Der zweite Vorname des Mitarbeiters ist ein NULL-Wert, welcher standardmäßig der Abwesenheit eines Elements oder Attributs zugeordnet ist. Wenn Sie jedoch möchten, dass für NULL-Werte Elemente generiert werden, können Sie die ELEMENTS-Direktive mit XSINIL angeben, wie in der folgenden Abfrage gezeigt.
SELECT EmployeeID "@EmpID",
FirstName "EmpName/First",
MiddleName "EmpName/Middle",
LastName "EmpName/Last"
FROM HumanResources.Employee E, Person.Contact C
WHERE E.EmployeeID = C.ContactID AND
E.EmployeeID = 1
FOR XML PATH, ELEMENTS XSINIL;
Dies ist das Ergebnis:
<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
EmpID="1">
<EmpName>
<First>Gustavo</First>
<Middle xsi:nil="true" />
<Last>Achong</Last>
</EmpName>
</row>
Standardmäßig generiert der PATH-Modus elementzentrierten XML-Code. Daher hat die Angabe der ELEMENTS-Direktive in einer Abfrage im PATH-Modus keine Wirkung. Die ELEMENTS-Direktive erweist sich jedoch in Verbindung mit XSINIL als nützlich, um Elemente für NULL-Werte zu generieren.
Die folgende Abfrage ruft außer der ID und dem Namen die Adresse eines Mitarbeiters ab. Entsprechend dem Pfad in den Spaltennamen für Adressspalten wird dem row
-Element ein untergeordnetes Address
-Element hinzugefügt, und die Adressdetails werden als untergeordnete Elemente des Address
-Elements hinzugefügt.
SELECT EmployeeID "@EmpID",
FirstName "EmpName/First",
MiddleName "EmpName/Middle",
LastName "EmpName/Last",
AddressLine1 "Address/AddrLine1",
AddressLine2 "Address/AddrLIne2",
City "Address/City"
FROM HumanResources.Employee E,
Person.Contact C,
Person.Address A
WHERE E.EmployeeID = C.ContactID
AND E.AddressID = A.AddressID
AND E.EmployeeID = 1
FOR XML PATH;
Dies ist das Ergebnis:
<row EmpID="1">
<EmpName>
<First>Gustavo</First>
<Last>Achong</Last>
</EmpName>
<Address>
<AddrLine1>7726 Driftwood Drive</AddrLine1>
<City>Monroe</City>
</Address>
</row>
Mehrere Spalten verwenden dasselbe Pfadpräfix
Wenn mehrere nachfolgende Spalten dasselbe Pfadpräfix aufweisen, werden sie unter demselben Namen gruppiert. Wenn verschiedene Namespacepräfixe verwendet werden, auch wenn sie an denselben Namespace gebunden sind, wird ein Pfad als unterschiedlich betrachtet. In der vorherigen Abfrage teilen sich die Spalten , und die FirstName
, MiddleName
und LastName
die Spalten dasselbe EmpName
Präfix. Daher werden sie als untergeordnete Elemente des EmpName
Elements hinzugefügt. Dies war auch der Fall, als Sie das Address
-Element im vorherigen Beispiel erstellt haben.
Eine Spalte hat einen anderen Namen
Wenn eine Spalte in einer Reihe von Spalten einen anderen Namen aufweist, wird die Gruppierung unterbrochen, wie in der folgenden, geänderten Abfrage gezeigt. Die Abfrage umbricht die Gruppierung von FirstName
, MiddleName
und LastName
, wie in der vorherigen Abfrage angegeben, durch Hinzufügen von Adressspalten zwischen den FirstName
Spalten und MiddleName
spalten.
SELECT EmployeeID "@EmpID",
FirstName "EmpName/First",
AddressLine1 "Address/AddrLine1",
AddressLine2 "Address/AddrLIne2",
City "Address/City",
MiddleName "EmpName/Middle",
LastName "EmpName/Last"
FROM HumanResources.EmployeeAddress E,
Person.Contact C,
Person.Address A
WHERE E.EmployeeID = C.ContactID
AND E.AddressID = A.AddressID
AND E.EmployeeID = 1
FOR XML PATH;
Daher erstellt die Abfrage zwei EmpName
-Elemente. Das erste EmpName
-Element verfügt über das untergeordnete FirstName
-Element, und das zweite EmpName
-Element verfügt über die untergeordneten Elemente MiddleName
und LastName
.
Dies ist das Ergebnis:
<row EmpID="1">
<EmpName>
<First>Gustavo</First>
</EmpName>
<Address>
<AddrLine1>7726 Driftwood Drive</AddrLine1>
<City>Monroe</City>
</Address>
<EmpName>
<Last>Achong</Last>
</EmpName>
</row>
Siehe auch
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für