Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
A continuación se muestran las condiciones específicas en las que las columnas de conjunto de filas con un nombre se mapean, sensibles a mayúsculas y minúsculas, al XML resultante.
El nombre de la columna comienza con un signo en (@).
El nombre de columna no comienza con un signo (@).
El nombre de la columna no comienza con una arroba ( @ ) y contiene una barra diagonal (/).
Varias columnas comparten el mismo prefijo.
Una columna tiene un nombre diferente.
Nombre de columna comienza con un signo at (@)
Si el nombre de columna comienza con un signo en (@) y no contiene una barra diagonal (/), se crea un atributo del <row> elemento que tiene el valor de columna correspondiente. Por ejemplo, la consulta siguiente devuelve un conjunto de filas de dos columnas (@PmId, Nombre). En el XML resultante, se agrega un atributo PmId al elemento correspondiente <row> y se le asigna un valor de ProductModelID.
SELECT ProductModelID as "@PmId",
Name
FROM Production.ProductModel
WHERE ProductModelID=7
FOR XML PATH
go
El resultado es el siguiente:
<row PmId="7">
<Name>HL Touring Frame</Name>
</row>
Tenga en cuenta que los atributos deben aparecer antes de cualquier otro tipo de nodo, como nodos de elemento y nodos de texto, en el mismo nivel. La consulta siguiente devolverá un error:
SELECT Name,
ProductModelID as "@PmId"
FROM Production.ProductModel
WHERE ProductModelID=7
FOR XML PATH
go
El nombre de columna no comienza con un signo at (@)
Si el nombre de columna no comienza con un signo (@), no es una de las pruebas de nodo XPath y no contiene una barra diagonal (/), se crea un elemento XML que es un subelemento del elemento de fila, <row> de forma predeterminada.
La consulta siguiente especifica el nombre de columna, el resultado. Por lo tanto, se agrega un elemento hijo al elemento <row>.
SELECT 2+2 as result
for xml PATH
El resultado es el siguiente:
<row>
<result>4</result>
</row>
La consulta siguiente especifica el nombre de columna ManuWorkCenterInformation para el XML devuelto por la XQuery especificada en la columna Instructions de tipo xml . Por lo tanto, se agrega un elemento <ManuWorkCenterInformation> como hijo del elemento <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
El resultado es el siguiente:
<row>
<ProductModelID>7</ProductModelID>
<Name>HL Touring Frame</Name>
<ManuWorkCenterInformation>
<MI:Location ...LocationID="10" ...></MI:Location>
<MI:Location ...LocationID="20" ...></MI:Location>
...
</ManuWorkCenterInformation>
</row>
El nombre de columna no comienza con un signo at (@) y contiene una barra diagonal (/)
Si el nombre de columna no comienza con un signo (@), pero contiene una barra diagonal (/), el nombre de columna indica una jerarquía XML. Por ejemplo, si el nombre de columna es "Name1/Name2/Name3.../Namen ", cada Nombrei representa un nombre de elemento anidado en el elemento de fila actual (para i=1) o que está bajo el elemento que tiene el nombre Namei-1. Si Namen comienza con '@', se asigna a un atributo del elemento Namen-1 .
Por ejemplo, la consulta siguiente devuelve un identificador de empleado y un nombre que se representan como un elemento complejo EmpName que contiene un nombre primero, medio y apellido.
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
Los nombres de las columnas se utilizan como una ruta de acceso para construir XML en el modo PATH. El nombre de columna que contiene valores de id. de empleado, comienza por "@". Por lo tanto, se agrega un atributo EmpID al <row> elemento . Todas las demás columnas incluyen una barra diagonal ('/') en el nombre de columna que indica la jerarquía. El XML resultante tendrá el <EmpName> como elemento secundario bajo el <row> elemento, y el <EmpName> como elemento secundario tendrá elementos secundarios <First>, <Middle> y <Last>.
<row EmpID="1">
<EmpName>
<First>Gustavo</First>
<Last>Achong</Last>
</EmpName>
</row>
El nombre intermedio del empleado es NULL y, de forma predeterminada, el valor NULL se asigna a la ausencia del elemento o atributo. Si desea generar elementos para los valores NULL, puede especificar la directiva ELEMENTS con XSINIL como se muestra en esta consulta.
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
El resultado es el siguiente:
<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>
De forma predeterminada, el modo PATH genera XML centrado en elementos. Por lo tanto, especificar la directiva ELEMENTS en una consulta en modo PATH no tiene ningún efecto. Sin embargo, como se muestra en el ejemplo anterior, la directiva ELEMENTS es útil con XSINIL para generar elementos para valores NULL.
Además del identificador y el nombre, la consulta siguiente recupera una dirección de empleado. Según la ruta de acceso de los nombres de columna para las columnas de dirección, se agrega un elemento secundario <Address> al elemento <row> y los detalles de dirección se agregan como elementos secundarios del elemento <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
El resultado es el siguiente:
<row EmpID="1">
<EmpName>
<First>Gustavo</First>
<Last>Achong</Last>
</EmpName>
<Address>
<AddrLine1>7726 Driftwood Drive</AddrLine1>
<City>Monroe</City>
</Address>
</row>
Varias columnas comparten el mismo prefijo de ruta
Si varias columnas consecutivas comparten el mismo prefijo de ruta, se agrupan bajo el mismo nombre. Si se usan prefijos de espacio de nombres diferentes incluso si están enlazados al mismo espacio de nombres, una ruta de acceso se considera diferente. En la consulta anterior, las columnas FirstName, MiddleName y LastName comparten el mismo prefijo EmpName. Por lo tanto, se agregan como elementos secundarios del <EmpName> elemento . Este es también el caso cuando se estaba creando el <Address> elemento en el ejemplo anterior.
Una columna tiene un nombre diferente
Si una columna con un nombre diferente aparece entre sí, interrumpirá la agrupación, como se muestra en la consulta modificada siguiente. La consulta interrumpe la agrupación de FirstName, MiddleName y LastName, como se especifica en la consulta anterior, agregando columnas de dirección entre las columnas FirstName y 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
Como resultado, la consulta crea dos <EmpName> elementos. El primer <EmpName> elemento tiene el <FirstName> elemento secundario y el segundo <EmpName> elemento tiene los <MiddleName> y <LastName> elementos secundarios.
El resultado es el siguiente:
<row EmpID="1">
<EmpName>
<First>Gustavo</First>
</EmpName>
<Address>
<AddrLine1>7726 Driftwood Drive</AddrLine1>
<City>Monroe</City>
</Address>
<EmpName>
<Last>Achong</Last>
</EmpName>
</row>