Partilhar via


XQueries que envolvem ordens

Aplica-se a:SQL Server

Os bancos de dados relacionais não têm um conceito de sequência. Por exemplo, não é possível fazer uma solicitação como "Obter o primeiro cliente do banco de dados". No entanto, você pode consultar um documento XML e recuperar o primeiro <elemento Customer> . Em seguida, você sempre recuperará o mesmo cliente.

Este tópico ilustra consultas com base na sequência em que os nós aparecem no documento.

Exemplos

Um. Recuperar etapas de fabricação no segundo local do centro de trabalho de um produto

Para um modelo de produto específico, a consulta a seguir recupera as etapas de fabricação no segundo local do centro de trabalho em uma sequência de locais do centro de trabalho no processo de fabricação.

SELECT Instructions.query('  
     declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";  
    <ManuStep ProdModelID = "{sql:column("Production.ProductModel.ProductModelID")}"  
                ProductModelName = "{ sql:column("Production.ProductModel.Name") }" >  
     <Location>  
       { (//AWMI:root/AWMI:Location)[2]/@* }  
       <Steps>  
         { for $s in (//AWMI:root/AWMI:Location)[2]//AWMI:step  
           return  
              <Step>  
               { string($s) }  
              </Step>  
         }  
        </Steps>  
      </Location>  
     </ManuStep>  
') as Result  
FROM Production.ProductModel  
WHERE ProductModelID=7  

Observe o seguinte da consulta anterior:

  • As expressões nos suportes encaracolados são substituídas pelo resultado da sua avaliação. Para obter mais informações, consulte Construção XML (XQuery).

  • @* Recupera todos os atributos do segundo local do centro de trabalho.

  • A iteração FLWOR (FOR ... RETURN) recupera todos os <step> elementos filho do segundo local do centro de trabalho.

  • A função sql:column() (XQuery) inclui o valor relacional no XML que está sendo construído.

Este é o resultado:

<ManuStep ProdModelID="7" ProductModelName="HL Touring Frame">  
  <Location LocationID="20" SetupHours="0.15"   
              MachineHours="2"  LaborHours="1.75" LotSize="1">  
  <Steps>  
   <Step>Assemble all frame components following blueprint 1299.</Step>  
     ...  
  </Steps>  
 </Location>  
</ManuStep>    

A consulta anterior recupera apenas os nós de texto. Se desejar que o elemento inteiro <step> seja retornado, remova a função string() da consulta:

B. Encontre todos os materiais e ferramentas utilizados no segundo local do centro de trabalho na fabricação de um produto

Para um modelo de produto específico, a consulta a seguir recupera as ferramentas e os materiais usados no segundo local do centro de trabalho na sequência de locais do centro de trabalho no processo de fabricação.

SELECT Instructions.query('  
    declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";  
   <Location>  
      { (//AWMI:root/AWMI:Location)[1]/@* }  
       <Tools>  
         { for $s in (//AWMI:root/AWMI:Location)[1]//AWMI:step//AWMI:tool  
           return  
              <Tool>  
                { string($s) }  
              </Tool>  
          }  
        </Tools>  
        <Materials>  
            { for $s in (//AWMI:root/AWMI:Location)[1]//AWMI:step//AWMI:material  
              return  
                 <Material>  
                    { string($s) }  
                 </Material>  
             }  
         </Materials>  
  </Location>  
') as Result  
FROM Production.ProductModel  
where ProductModelID=7  

Observe o seguinte da consulta anterior:

  • A consulta constrói o <Location> elemento e recupera seus valores de atributo do banco de dados.

  • Ele usa dois FLWOR (para... return) iterações: uma para recuperar ferramentas e outra para recuperar o material utilizado.

Este é o resultado:

<Location LocationID="10" SetupHours=".5"   
          MachineHours="3" LaborHours="2.5" LotSize="100">  
  <Tools>  
    <Tool>T-85A framing tool</Tool>  
    <Tool>Trim Jig TJ-26</Tool>  
    <Tool>router with a carbide tip 15</Tool>  
    <Tool>Forming Tool FT-15</Tool>  
  </Tools>  
  <Materials>  
    <Material>aluminum sheet MS-2341</Material>  
  </Materials>  
</Location>  

C. Recuperar as duas primeiras descrições de recursos do produto do catálogo de produtos

Para um modelo de produto específico, a consulta recupera as duas primeiras descrições de recursos do <Features> elemento no catálogo de modelos de produtos.

SELECT CatalogDescription.query('  
     declare namespace p1="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
     <ProductModel ProductModelID= "{ data( (/p1:ProductDescription/@ProductModelID)[1] ) }"  
                   ProductModelName = "{ data( (/p1:ProductDescription/@ProductModelName)[1] ) }" >  
       {  
         for $F in /p1:ProductDescription/p1:Features  
         return   
           $F/*[position() <= 2]   
       }  
     </ProductModel>  
      ') as x  
FROM Production.ProductModel  
where ProductModelID=19  

Observe o seguinte da consulta anterior:

O corpo da consulta constrói XML que inclui o <ProductModel> elemento que tem os atributos ProductModelID e ProductModelName.

  • A consulta usa um FOR ... Loop RETURN para recuperar as descrições dos recursos do modelo de produto. A função position() é usada para recuperar os dois primeiros recursos.

Este é o resultado:

<ProductModel ProductModelID="19" ProductModelName="Mountain 100">  
 <p1:Warranty   
  xmlns:p1="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain">  
  <p1:WarrantyPeriod>3 year</p1:WarrantyPeriod>  
  <p1:Description>parts and labor</p1:Description>  
 </p1:Warranty>  
 <p2:Maintenance   
  xmlns:p2="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain">  
  <p2:NoOfYears>10</p2:NoOfYears>  
  <p2:Description>maintenance contact available through your dealer   
            or any AdventureWorks retail store.  
  </p2:Description>  
 </p2:Maintenance>  
</ProductModel>   

D. Encontre as duas primeiras ferramentas utilizadas no primeiro local do centro de trabalho no processo de fabricação do produto

Para um modelo de produto, essa consulta retorna as duas primeiras ferramentas usadas no primeiro local do centro de trabalho na sequência de locais do centro de trabalho no processo de fabricação. A consulta é especificada em relação às instruções de fabricação armazenadas na coluna Instruções da tabela Production.ProductModel .

SELECT Instructions.query('  
     declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";  
   for $Inst in (//AWMI:root/AWMI:Location)[1]  
   return   
     <Location>  
       { $Inst/@* }  
       <Tools>  
         { for $s in ($Inst//AWMI:step//AWMI:tool)[position() <= 2]  
           return  
             <Tool>  
               { string($s) }  
             </Tool>  
         }  
       </Tools>  
     </Location>  
') as Result  
FROM Production.ProductModel  
where ProductModelID=7  

Este é o resultado:

<Location LocationID="10" SetupHours=".5"   
            MachineHours="3" LaborHours="2.5" LotSize="100">  
  <Tools>  
    <Tool>T-85A framing tool</Tool>  
    <Tool>Trim Jig TJ-26</Tool>  
  </Tools>  
</Location>   

E. Encontre as duas últimas etapas de fabricação no primeiro local do centro de trabalho na fabricação de um produto específico

A consulta usa a função last() para recuperar as duas últimas etapas de fabricação.

SELECT Instructions.query('   
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";  
  <LastTwoManuSteps>  
   <Last-1Step>   
     { (/AWMI:root/AWMI:Location)[1]/AWMI:step[(last()-1)]/text() }  
   </Last-1Step>  
   <LastStep>   
     { (/AWMI:root/AWMI:Location)[1]/AWMI:step[last()]/text() }  
   </LastStep>  
  </LastTwoManuSteps>') as Result  
FROM Production.ProductModel  
where ProductModelID=7  

Este é o resultado:

<LastTwoManuSteps>  
   <Last-1Step>When finished, inspect the forms for defects per   
               Inspection Specification .</Last-1Step>  
   <LastStep>Remove the frames from the tool and place them in the   
             Completed or Rejected bin as appropriate.</LastStep>  
</LastTwoManuSteps>  

Ver também

Dados XML (SQL Server)
Referência de Linguagem XQuery (SQL Server)
Construção XML (XQuery)