Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Voici les conditions spécifiques dans lesquelles les colonnes d’ensemble de lignes avec un nom sont mappées, sensibles à la casse, au code XML résultant :
Le nom de colonne commence par un arobase (@).
Le nom de la colonne ne commence pas par un signe (@).
Le nom de colonne ne commence pas par un arobase (@) et contient une barre oblique (/).
Plusieurs colonnes partagent le même préfixe.
Une colonne a un nom différent.
Le nom de colonne commence par un signe at (@)
Si le nom de colonne commence par un signe at sign (@) et ne contient pas de barre oblique (/), un attribut de l’élément <row> qui a la valeur de colonne correspondante est créé. Par exemple, la requête suivante retourne un ensemble de lignes à deux colonnes (@PmId, Name). Dans le code XML résultant, un attribut PmId est ajouté à l’élément correspondant <row> et une valeur de ProductModelID lui est affectée.
SELECT ProductModelID as "@PmId",
Name
FROM Production.ProductModel
WHERE ProductModelID=7
FOR XML PATH
go
Voici le résultat obtenu :
<row PmId="7">
<Name>HL Touring Frame</Name>
</row>
Notez que les attributs doivent être fournis avant tous les autres types de nœuds, tels que les nœuds d’élément et les nœuds de texte, au même niveau. La requête suivante retourne une erreur :
SELECT Name,
ProductModelID as "@PmId"
FROM Production.ProductModel
WHERE ProductModelID=7
FOR XML PATH
go
Le nom de la colonne ne commence pas par un arobase (@)
Si le nom de colonne ne commence pas par un signe arobase (@), n’est pas l’un des tests de nœud XPath et ne contient pas de barre oblique (/), un élément XML qui est un sous-élément de l’élément de ligne, <row> par défaut, est créé.
La requête suivante spécifie le nom de colonne, le résultat. Par conséquent, un élément enfant <result> est ajouté à l'élément <row>.
SELECT 2+2 as result
for xml PATH
Voici le résultat obtenu :
<row>
<result>4</result>
</row>
La requête suivante spécifie le nom de colonne, ManuWorkCenterInformation, pour le code XML retourné par la requête XQuery spécifiée par rapport à la colonne Instructions du type xml . Par conséquent, un <ManuWorkCenterInformation> élément est ajouté en tant qu’enfant de l’élément.<row>
SELECT
ProductModelID,
Name,
Instructions.query('declare namespace MI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
/MI:root/MI:Location
') as ManuWorkCenterInformation
FROM Production.ProductModel
WHERE ProductModelID=7
FOR XML PATH
go
Voici le résultat obtenu :
<row>
<ProductModelID>7</ProductModelID>
<Name>HL Touring Frame</Name>
<ManuWorkCenterInformation>
<MI:Location ...LocationID="10" ...></MI:Location>
<MI:Location ...LocationID="20" ...></MI:Location>
...
</ManuWorkCenterInformation>
</row>
Le nom de colonne ne commence pas par une arobase (@) et contient une barre oblique (/)
Si le nom de colonne ne commence pas par un signe (@), mais contient une barre oblique (/), le nom de colonne indique une hiérarchie XML. Par exemple, si le nom de colonne est « Name1/Name2/Name3.../Namen », chaque nomi représente un nom d’élément imbriqué dans l’élément de ligne actuel (pour i=1) ou qui se trouve sous l’élément portant le nomi-1. Si Namen commence par « @ », il est mappé à un attribut de l’élément Namen-1 .
Par exemple, la requête suivante retourne un ID d’employé et un nom qui sont représentés sous la forme d’un élément complexe EmpName qui contient un prénom, un milieu et un nom.
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
Les noms de colonnes sont utilisés comme chemin d’accès pour construire du code XML en mode PATH. Le nom de colonne qui contient des valeurs d’ID d’employé commence par « @ ». Par conséquent, un attribut , EmpID, est ajouté à l’élément <row> . Toutes les autres colonnes incluent une barre oblique ('/') dans le nom de colonne qui indique la hiérarchie. Le code XML résultant aura l'enfant <EmpName> sous l'élément <row>, et l'enfant <EmpName> aura les éléments enfants <First>, <Middle> et <Last>.
<row EmpID="1">
<EmpName>
<First>Gustavo</First>
<Last>Achong</Last>
</EmpName>
</row>
Le deuxième prénom de l’employé est null et, par défaut, la valeur null est associée à l’absence de l’élément ou de l’attribut. Si vous souhaitez que des éléments soient générés pour les valeurs NULL, vous pouvez spécifier la directive ELEMENTS avec XSINIL comme indiqué dans cette requête.
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
Voici le résultat obtenu :
<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>
Par défaut, le mode PATH génère du code XML centré sur les éléments. Par conséquent, la spécification de la directive ELEMENTS dans une requête en mode PATH n’a aucun effet. Toutefois, comme indiqué dans l’exemple précédent, la directive ELEMENTS est utile avec XSINIL pour générer des éléments pour les valeurs Null.
Outre l’ID et le nom, la requête suivante récupère une adresse d’employé. Conformément au chemin d’accès des noms de colonnes pour les colonnes d’adresses, un élément enfant <Address> est ajouté à l’élément <row> et les détails de l’adresse sont ajoutés en tant qu’enfants d’élément de l’élément <Address>.
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
Voici le résultat obtenu :
<row EmpID="1">
<EmpName>
<First>Gustavo</First>
<Last>Achong</Last>
</EmpName>
<Address>
<AddrLine1>7726 Driftwood Drive</AddrLine1>
<City>Monroe</City>
</Address>
</row>
Plusieurs colonnes partagent le même préfixe de chemin
Si plusieurs colonnes suivantes partagent le même préfixe de chemin d’accès, elles sont regroupées sous le même nom. Si des préfixes d’espace de noms différents sont utilisés même s’ils sont liés au même espace de noms, un chemin d’accès est considéré comme différent. Dans la requête précédente, les colonnes FirstName, MiddleName et LastName partagent le même préfixe EmpName. Par conséquent, ils sont ajoutés en tant qu’enfants de l’élément <EmpName> . C’est également le cas lorsque vous créez l’élément <Address> dans l’exemple précédent.
Une colonne a un nom différent
Si une colonne portant un autre nom apparaît entre elles, elle interrompt le regroupement, comme indiqué dans la requête modifiée suivante. La requête interrompt le regroupement de FirstName, MiddleName et LastName, comme spécifié dans la requête précédente, en ajoutant des colonnes d’adresse entre les colonnes FirstName et MiddleName.
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
Par conséquent, la requête crée deux <EmpName> éléments. Le premier élément <EmpName> a l'enfant de l'élément <FirstName>, et le deuxième élément <EmpName> a les enfants de l'élément <MiddleName> et <LastName>.
Voici le résultat obtenu :
<row EmpID="1">
<EmpName>
<First>Gustavo</First>
</EmpName>
<Address>
<AddrLine1>7726 Driftwood Drive</AddrLine1>
<City>Monroe</City>
</Address>
<EmpName>
<Last>Achong</Last>
</EmpName>
</row>