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
Uma etapa de eixo em uma expressão de caminho inclui os seguintes componentes:
Um eixo
Para obter mais informações, consulte Expressões de caminho (XQuery).
A implementação XQuery no SQL Server suporta as seguintes etapas de eixo,
| Eixo | Descrição |
|---|---|
| criança | Retorna filhos do nó de contexto. |
| descendente | Retorna todos os descendentes do nó de contexto. |
| pai | Retorna o pai do nó de contexto. |
| atributo | Retorna atributos do nó de contexto. |
| auto- | Retorna o nó de contexto em si. |
| descendente ou | Retorna o nó de contexto e todos os descendentes do nó de contexto. |
Todos esses eixos, exceto o eixo pai, são eixos para frente. O eixo pai é um eixo inverso, porque ele pesquisa para trás na hierarquia de documentos. Por exemplo, a expressão de caminho relativo child::ProductDescription/child::Summary tem duas etapas e cada etapa especifica um eixo child. A primeira etapa recupera o <ProductDescription> elementos filhos do nó de contexto. Para cada nó de elemento> ProductDescription <, a segunda etapa recupera os filhos do nó <Summary> elemento.
A expressão de caminho relativo, child::root/child::Location/attribute::LocationID, tem três etapas. As duas primeiras etapas especificam cada uma um eixo child e a terceira etapa especifica o eixo attribute. Quando executada em relação aos documentos XML de instruções de fabricação na tabela Production.ProductModel, a expressão retorna o atributo LocationID do <Location> elemento filho filho do elemento> raiz <.
Exemplos
Os exemplos de consulta neste tópico são especificados em relação a colunas de tipo de xml no banco de dados AdventureWorks.
Um. Especificando um eixo filho
Para um modelo de produto específico, a consulta a seguir recupera os filhos do nó do elemento> Recursos <do nó do elemento <> ProductDescription da descrição do catálogo de produtos armazenada na tabela Production.ProductModel.
SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
/child::PD:ProductDescription/child::PD:Features')
FROM Production.ProductModel
WHERE ProductModelID=19
Observe o seguinte da consulta anterior:
O método
query()do tipo de dados xml especifica a expressão de caminho.Ambas as etapas na expressão de caminho especificam um eixo
childe os nomes dos nós,ProductDescriptioneFeatures, como testes de nó. Para obter informações sobre testes de nó, consulte Especificando o teste de nó em uma etapa de expressão de caminho.
B. Especificação dos eixos descendente e descendente ou próprio
O exemplo a seguir usa os eixos descendente e descendente ou próprio. A consulta neste exemplo é especificada em relação a uma variável de tipo de xml. A instância XML é simplificada para ilustrar facilmente a diferença nos resultados gerados.
declare @x xml
set @x='
<a>
<b>text1
<c>text2
<d>text3</d>
</c>
</b>
</a>'
declare @y xml
set @y = @x.query('
/child::a/child::b
')
select @y
No resultado a seguir, a expressão retorna o filho do nó do elemento <b> do nó do elemento <a>:
<b>text1
<c>text2
<d>text3</d>
</c>
</b>
Nesta expressão, se você especificar um eixo descendente para a expressão de caminho,
/child::a/child::b/descendant::*, você está pedindo todos os descendentes do nó <b> elemento.
O asterisco (*) no teste de nó representa o nome do nó como um teste de nó. Portanto, o tipo de nó primário do eixo descendente, o nó do elemento, determina os tipos de nós retornados. Ou seja, a expressão retorna todos os nós do elemento.. Os nós de texto não são retornados. Para obter mais informações sobre o tipo de nó primário e sua relação com o teste de nó, consulte tópico Especificando o teste de nó em uma etapa de expressão de caminho.
Os nós de elemento <c> e <d> são retornados, conforme mostrado no seguinte resultado:
<c>text2
<d>text3</d>
</c>
<d>text3</d>
Se você especificar um eixo descendente ou próprio em vez do eixo descendente, /child::a/child::b/descendant-or-self::* retornará o nó de contexto, o elemento <b>e seu descendente.
Este é o resultado:
<b>text1
<c>text2
<d>text3</d>
</c>
</b>
<c>text2
<d>text3</d>
</c>
<d>text3</d>
A consulta de exemplo a seguir no banco de dados AdventureWorks recupera todos os nós de elemento descendente do elemento <Features> filho do elemento <ProductDescription>:
SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
/child::PD:ProductDescription/child::PD:Features/descendant::*
')
FROM Production.ProductModel
WHERE ProductModelID=19
C. Especificando um eixo pai
A consulta a seguir retorna o filho do elemento <Summary> do elemento <ProductDescription> no documento XML do catálogo de produtos armazenado na tabela Production.ProductModel.
Este exemplo usa o eixo pai para retornar ao pai do elemento <Feature> e recuperar o elemento <Summary> filho do elemento <ProductDescription>.
SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
/child::PD:ProductDescription/child::PD:Features/parent::PD:ProductDescription/child::PD:Summary
')
FROM Production.ProductModel
WHERE ProductModelID=19
Neste exemplo de consulta, a expressão de caminho usa o eixo parent. Você pode reescrever a expressão sem o eixo pai, conforme mostrado a seguir:
/child::PD:ProductDescription[child::PD:Features]/child::PD:Summary
Um exemplo mais útil do eixo pai é fornecido no exemplo a seguir.
Cada descrição do catálogo de modelo de produto armazenada na coluna CatalogDescription da tabela ProductModel tem um elemento <ProductDescription> que tem o atributo ProductModelID e <Features> elemento filho, conforme mostrado no fragmento a seguir:
<ProductDescription ProductModelID="..." >
...
<Features>
<Feature1>...</Feature1>
<Feature2>...</Feature2>
...
</ProductDescription>
A consulta define uma variável iteradora, $f, na instrução FLWOR para retornar os filhos do elemento <Features>. Para obter mais informações, consulte FLWOR Statement and Iteration (XQuery). Para cada recurso, a cláusula return constrói um XML no seguinte formato:
<Feature ProductModelID="...">...</Feature>
<Feature ProductModelID="...">...</Feature>
Para adicionar o ProductModelID para cada elemento <Feature>, o eixo parent é especificado:
SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
declare namespace wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain";
for $f in /child::PD:ProductDescription/child::PD:Features/child::*
return
<Feature
ProductModelID="{ ($f/parent::PD:Features/parent::PD:ProductDescription/attribute::ProductModelID)[1]}" >
{ $f }
</Feature>
')
FROM Production.ProductModel
WHERE ProductModelID=19
Este é o resultado parcial:
<Feature ProductModelID="19">
<wm:Warranty
xmlns:wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain">
<wm:WarrantyPeriod>3 years</wm:WarrantyPeriod>
<wm:Description>parts and labor</wm:Description>
</wm:Warranty>
</Feature>
<Feature ProductModelID="19">
<wm:Maintenance
xmlns:wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain">
<wm:NoOfYears>10 years</wm:NoOfYears>
<wm:Description>maintenance contract available through your dealer
or any AdventureWorks retail store.</wm:Description>
</wm:Maintenance>
</Feature>
<Feature ProductModelID="19">
<p1:wheel
xmlns:p1="https://www.adventure-works.com/schemas/OtherFeatures">
High performance wheels.
</p1:wheel>
</Feature>
Observe que a [1] de predicados na expressão de caminho é adicionada para garantir que um valor singleton seja retornado.