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
A maioria das colunas do tipo xml no banco de dados AdventureWorks são documentos semiestruturados. Portanto, os documentos armazenados em cada linha podem parecer diferentes. Os exemplos de consulta neste tópico ilustram como extrair informações desses vários documentos.
Exemplos
Um. A partir dos documentos de instruções de fabricação, recupere os locais do centro de trabalho juntamente com a primeira etapa de fabricação nesses locais
Para o modelo de produto 7, a consulta constrói XML que inclui o elemento <ManuInstr>, com ProductModelID e atributos de ProductModelName e um ou mais elementos filho <Location>.
Cada elemento <Location> tem seu próprio conjunto de atributos e um elemento filho <step>. Este elemento filho <step> é a primeira etapa de fabricação no local do centro de trabalho.
SELECT Instructions.query('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
\<ManuInstr ProdModelID = "{sql:column("Production.ProductModel.ProductModelID") }"
ProductModelName = "{ sql:column("Production.ProductModel.Name") }" >
{
for $wc in //AWMI:root/AWMI:Location
return
<Location>
{$wc/@* }
<step1> { string( ($wc//AWMI:step)[1] ) } </step1>
</Location>
}
</ManuInstr>
') as Result
FROM Production.ProductModel
WHERE ProductModelID=7
Observe o seguinte da consulta anterior:
O namespace palavra-chave no XQuery Prolog define um prefixo de namespace. Esse prefixo é usado posteriormente no corpo da consulta.
Os tokens de comutação de contexto, {) e (}, são usados para alternar a consulta da construção XML para a avaliação da consulta.
O sql:column() é usado para incluir um valor relacional no XML que está sendo construído.
Ao construir o elemento <
Location>, $wc/@* recupera todos os atributos de localização do centro de trabalho.A função string() retorna o valor da cadeia de caracteres do elemento <
step>.
Este é um resultado parcial:
<ManuInstr ProdModelID="7" ProductModelName="HL Touring Frame">
<Location LocationID="10" SetupHours="0.5"
MachineHours="3" LaborHours="2.5" LotSize="100">
<step1>Insert aluminum sheet MS-2341 into the T-85A
framing tool.</step1>
</Location>
<Location LocationID="20" SetupHours="0.15"
MachineHours="2" LaborHours="1.75" LotSize="1">
<step1>Assemble all frame components following
blueprint 1299.</step1>
</Location>
...
</ManuInstr>
B. Encontre todos os números de telefone na coluna AdditionalContactInfo
A consulta a seguir recupera números de telefone adicionais para um contato de cliente específico pesquisando toda a hierarquia para o elemento <telephoneNumber>. Como o elemento <telephoneNumber> pode aparecer em qualquer lugar na hierarquia, a consulta usa o descendente e o autooperador (//) na pesquisa.
SELECT AdditionalContactInfo.query('
declare namespace ci="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactInfo";
declare namespace act="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes";
for $ph in /ci:AdditionalContactInfo//act:telephoneNumber
return
$ph/act:number
') as x
FROM Person.Contact
WHERE ContactID = 1
Este é o resultado:
\<act:number
xmlns:act="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes">
111-111-1111
\</act:number>
\<act:number
xmlns:act="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes">
112-111-1111
\</act:number>
Para recuperar apenas os números de telefone de nível superior, especificamente os elementos filho <telephoneNumber> de <AdditionalContactInfo>, a expressão FOR na consulta muda para
for $ph in /ci:AdditionalContactInfo/act:telephoneNumber.
Ver também
Noções básicas do XQuery
Construção XML (XQuery)
dados XML (SQL Server)