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
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)