Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Veja a seguir as condições específicas nas quais as colunas de conjunto de linhas com um nome são mapeadas, diferenciando maiúsculas de minúsculas, para o XML resultante:
O nome da coluna começa com um sinal de sinal (@).
O nome da coluna não começa com um sinal de arroba (@).
O nome da coluna não começa com um sign@ e contém uma marca de barra (/).
Várias colunas compartilham o mesmo prefixo.
Uma coluna tem um nome diferente.
O nome da coluna começa com um sinal de at (@)
Se o nome da coluna começar com um sinal (@) e não contiver uma marca de barra (/), um atributo do <row> elemento que tem o valor de coluna correspondente será criado. Por exemplo, a consulta a seguir retorna um conjunto de linhas de duas colunas (@PmId, Nome). No XML resultante, um atributo PmId é 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
go
Este é o resultado:
<row PmId="7">
<Name>HL Touring Frame</Name>
</row>
Observe que os atributos devem vir antes de qualquer outro tipo de nó, como nós de elemento e nós de texto, no mesmo nível. A consulta a seguir retornará um erro:
SELECT Name,
ProductModelID as "@PmId"
FROM Production.ProductModel
WHERE ProductModelID=7
FOR XML PATH
go
O nome da coluna não começa com um sinal de arroba (@)
Se o nome da coluna não começar com um sinal de arroba (@), não for um dos testes de nó XPath e não contiver uma barra (/), por padrão, será criado um elemento XML que é um subelemento do elemento de linha, como <row>.
A consulta a seguir especifica o nome da coluna, o resultado. Portanto, um <result> filho do elemento é adicionado ao <row> elemento.
SELECT 2+2 as result
for xml PATH
Este é o resultado:
<row>
<result>4</result>
</row>
A consulta a seguir especifica o nome da coluna ManuWorkCenterInformation para o XML retornado pelo XQuery, especificado na coluna Instructions do tipo xml. Portanto, um <ManuWorkCenterInformation> elemento é adicionado como um filho do <row> elemento.
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
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 um sinal de arroba (@) e contém uma barra (/)
Se o nome da coluna não começar com um sinal de arroba (@), mas contiver uma barra (/), o nome da coluna indica uma hierarquia XML. Por exemplo, se o nome da coluna for "Name1/Name2/Name3.../Namen ", cada Nomei representará um nome de elemento aninhado no elemento de linha atual (para i=1) ou que esteja sob o elemento que tem o nome Nomei-1. Se o Nomen começar com '@', ele será mapeado para um atributo do elemento Namen-1 .
Por exemplo, a consulta a seguir retorna uma ID de funcionário e um nome que são representados como um elemento complexo EmpName que contém um Nome, Meio e Sobrenome.
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 de coluna são usados como um caminho na construção de XML no modo PATH. O nome da coluna que contém valores de ID do funcionário começa com '@'. Portanto, um atributo, EmpID, é adicionado ao <row> elemento. Todas as outras colunas incluem uma marca de barra ('/') no nome da coluna que indica hierarquia. O XML resultante terá o <EmpName> filho sob o <row> elemento, e o <EmpName> filho terá <First>, <Middle> e <Last> elementos filhos.
<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 é mapeado para a ausência do elemento ou atributo. Se desejar que os elementos são gerados para os valores NULL, especifique a diretiva ELEMENTS com XSINIL, conforme 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 padrão, o modo PATH gera XML centrado em elemento. Portanto, especificar a diretiva ELEMENTS em uma consulta de modo PATH não tem efeito. No entanto, conforme mostrado no exemplo anterior, a diretiva ELEMENTS é útil com XSINIL para gerar elementos para valores nulos.
Além da ID e do nome, a consulta a seguir recupera um endereço de funcionário. De acordo com o caminho nos nomes de coluna para colunas de endereço, 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 compartilham o mesmo prefixo de caminho
Se várias colunas subsequentes compartilharem o mesmo prefixo de caminho, elas serão agrupadas com o mesmo nome. Se prefixos de namespace diferentes estiverem sendo usados mesmo que estejam associados ao mesmo namespace, um caminho será considerado diferente. Na consulta anterior, as colunas FirstName, MiddleName e LastName compartilham o mesmo prefixo EmpName. Portanto, eles são adicionados como filhos do <EmpName> elemento. Esse também é o caso quando você estava criando o <Address> elemento no exemplo anterior.
Uma coluna tem um nome diferente
Se uma coluna com um nome diferente aparecer no meio, ela interromperá o agrupamento, conforme mostrado na consulta modificada a seguir. A consulta interrompe 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 <EmpName> elemento tem o elemento filho <FirstName> e o segundo <EmpName> elemento 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>