Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Base de dados SQL no Microsoft Fabric
Seguem-se as condições específicas em que as colunas de conjunto de linhas com um nome são mapeadas, com sensibilidade a maiúsculas minúsculas, para o XML resultante:
O nome da coluna começa com um sinal at (
@).O nome da coluna não começa com o sinal at (
@).O nome da coluna não começa com um sinal at (
@) e contém uma barra (/).Várias colunas partilham o mesmo prefixo.
Uma coluna tem um nome diferente.
O nome da coluna começa com um sinal at (@)
Se o nome da coluna começar com um sinal at (@) e não contiver uma marca de barra (/), é criado um atributo do row elemento que tem o valor correspondente da colunha. Por exemplo, a consulta seguinte devolve um conjunto de linhas de duas colunas (@PmId, Name). No XML resultante, um PmId atributo é adicionado ao elemento correspondente row e um valor de ProductModelID é atribuído a ele.
SELECT ProductModelID as "@PmId",
Name
FROM Production.ProductModel
WHERE ProductModelID = 7
FOR XML PATH;
Este é o resultado:
<row PmId="7">
<Name>HL Touring Frame</Name>
</row>
Os atributos devem preceder quaisquer outros tipos de nós, como nós de elemento e nós de texto, no mesmo nível. A consulta seguinte devolverá um erro:
SELECT Name,
ProductModelID as "@PmId"
FROM Production.ProductModel
WHERE ProductModelID = 7
FOR XML PATH;
O nome da coluna não começa com o sinal de at (@)
Se o nome da coluna não começar com um sinal at (@), não for um dos testes de nó XPath, e não contiver uma barra (/), um elemento XML que é um subelemento do elemento de linha será criado por padrão row.
A consulta seguinte especifica o nome da coluna, o resultado. Portanto, um result elemento filho é adicionado ao row elemento.
SELECT 2 + 2 as result
for xml PATH;
Este é o resultado:
<row>
<result>4</result>
</row>
A consulta seguinte especifica o nome da coluna, ManuWorkCenterInformation, para o XML devolvido pelo XQuery especificado para a coluna de tipo Instructions. Portanto, um ManuWorkCenterInformation elemento é adicionado como filho do row elemento.
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;
Este é o resultado:
<row>
<ProductModelID>7</ProductModelID>
<Name>HL Touring Frame</Name>
<ManuWorkCenterInformation>
<MI:Location ...LocationID="10" ...></MI:Location>
<MI:Location ...LocationID="20" ...></MI:Location>
...
</ManuWorkCenterInformation>
</row>
O nome da coluna não começa com o sinal at (@) e contém uma barra (/)
Se o nome da coluna não começar com um sinal at (@), mas contiver uma marca de barra (/), o nome da coluna indica uma hierarquia XML. Por exemplo, se o nome da coluna for "Nome1/Nome2/Nome3.../Nomen", cada Nomei representa um nome de elemento que está aninhado no elemento da linha atual (para i = 1) ou que está sob o elemento que tem o nomeNome i-1. Se o Nomen começar por @, é mapeado para um atributo do elemento Nomen-1 .
Por exemplo, a consulta seguinte devolve um ID de funcionário e um nome que são representados como um elemento EmpName complexo que contém um First, Middle, e Last nome.
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;
Os nomes das colunas são usados como caminho na construção de XML no modo PATH. O nome da coluna que contém os valores do ID do funcionário começa por '@'. Portanto, um atributo, EmpID, é adicionado ao row elemento. Todas as outras colunas incluem uma barra (/) no nome da coluna que indica hierarquia. O XML resultante terá o elemento filho EmpName sob o elemento row, e o elemento filho EmpName terá os elementos filhos First, Middle e Last.
<row EmpID="1">
<EmpName>
<First>Gustavo</First>
<Last>Achong</Last>
</EmpName>
</row>
O nome do meio do funcionário é nulo e, por padrão, o valor nulo corresponde à ausência do elemento ou atributo. Se quiser elementos gerados para os valores NULL, pode especificar a diretiva ELEMENTS com XSINIL, como mostrado nesta 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;
Este é o resultado:
<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>
Por defeito, o modo PATH gera XML centrado no elemento. Portanto, especificar a diretiva ELEMENTS numa consulta em modo PATH não tem efeito. No entanto, como mostrado no exemplo anterior, a diretiva ELEMENTS é útil com o XSINIL para gerar elementos para valores nulos.
Além do ID e do nome, a consulta seguinte recupera a morada de um funcionário. De acordo com o caminho nos nomes das colunas para endereços, um elemento filho Address é adicionado ao elemento row e os detalhes do endereço são adicionados como elementos filhos do 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;
Este é o resultado:
<row EmpID="1">
<EmpName>
<First>Gustavo</First>
<Last>Achong</Last>
</EmpName>
<Address>
<AddrLine1>7726 Driftwood Drive</AddrLine1>
<City>Monroe</City>
</Address>
</row>
Várias colunas partilham o mesmo prefixo path
Se várias colunas subsequentes partilharem o mesmo prefixo de caminho, são agrupadas sob o mesmo nome. Se prefixos de espaço de nomes diferentes estiverem a ser usados mesmo que estejam ligados ao mesmo espaço de nomes, um caminho é considerado diferente. Na consulta anterior, as colunas FirstName, MiddleName e LastName partilham o mesmo prefixo EmpName. Por isso, são adicionados como filhos do EmpName elemento. Isto também acontece quando estava a criar o Address elemento no exemplo anterior.
Uma coluna tem um nome diferente
Se aparecer uma coluna com um nome diferente no meio, irá quebrar o agrupamento, como mostrado na consulta modificada seguinte. A consulta quebra o agrupamento de FirstName, MiddleName e LastName, conforme especificado na consulta anterior, adicionando colunas de endereço entre as colunas FirstName e 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, a consulta cria dois EmpName elementos. O primeiro elemento EmpName tem o elemento filho FirstName, e o segundo elemento EmpName tem os elementos filhos MiddleName e LastName.
Este é o resultado:
<row EmpID="1">
<EmpName>
<First>Gustavo</First>
</EmpName>
<Address>
<AddrLine1>7726 Driftwood Drive</AddrLine1>
<City>Monroe</City>
</Address>
<EmpName>
<Last>Achong</Last>
</EmpName>
</row>