Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada SQL do Azure
O tipo de dados xml e a diretiva TYPE em consultas FOR XML permite que o XML retornado pelas consultas FOR XML seja processado no servidor, bem como no cliente.
Processamento com variáveis de tipo xml
Você pode atribuir o resultado da consulta FOR XML a uma variável de tipo de xml ou usar XQuery para consultar o resultado e atribuir esse resultado a uma variável de tipo de xml para mais processamento.
DECLARE @x xml
SET @x=(SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID=122 or ProductModelID=119
FOR XML RAW, TYPE)
SELECT @x
-- Result
--<row ProductModelID="122" Name="All-Purpose Bike Stand" />
--<row ProductModelID="119" Name="Bike Wash" />
Além disso, é possível processar o XML retornado na variável, @x
, usando um dos métodos xml tipo de dados. Por exemplo, você pode recuperar o valor do atributo ProductModelID
usando o método value().
DECLARE @i int;
SET @i = (SELECT @x.value('/row[1]/@ProductModelID[1]', 'int'));
SELECT @i;
No exemplo a seguir, o resultado da consulta FOR XML
é retornado como um tipo de xml, porque a diretiva TYPE
é especificada na cláusula FOR XML
.
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID=119 or ProductModelID=122
FOR XML RAW, TYPE,ROOT('myRoot');
Este é o resultado:
<myRoot>
<row ProductModelID="122" Name="All-Purpose Bike Stand" />
<row ProductModelID="119" Name="Bike Wash" />
</myRoot>
Como o resultado é do tipo de xml, pode especificar diretamente um dos métodos do tipo de dados xml neste XML, conforme mostrado na consulta a seguir. Na consulta, o método query() (xml Data Type) é usado para recuperar o primeiro elemento <row>
filho do elemento <myRoot>
.
SELECT (SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID=119 or ProductModelID=122
FOR XML RAW, TYPE,ROOT('myRoot')).query('/myRoot[1]/row[1]');
Este é o resultado:
<row ProductModelID="122" Name="All-Purpose Bike Stand" />
Retornar resultados de consulta interna FOR XML para consultas externas como instâncias de tipo xml
Você pode escrever consultas FOR XML
aninhadas, em que o resultado da consulta interna é retornado como um tipo xml para a consulta externa. Por exemplo:
SELECT Col1,
Col2,
( SELECT Col3, Col4
FROM T2
WHERE T2.Col = T1.Col
...
FOR XML AUTO, TYPE )
FROM T1
WHERE ...
FOR XML AUTO, TYPE;
Observe o seguinte da consulta anterior:
O XML gerado pela consulta
FOR XML
interna é adicionado ao XML gerado peloFOR XML
externo.A consulta interna especifica a diretiva
TYPE
. Portanto, os dados XML retornados pela consulta interna são do tipo XML. Se a diretiva TYPE não for especificada, o resultado da consultaFOR XML
interna será retornado como nvarchar(max) e os dados XML serão entitizados.
Controlar a forma dos dados XML resultantes
As consultas FOR XML aninhadas oferecem mais controle na definição da forma dos dados XML resultantes. Você pode usar consultas FOR XML aninhadas para construir XML que é parcialmente centrado em atributos e parcialmente centrado em elementos.
Para obter mais informações sobre como especificar XML centrado em atributos e em elementos com consultas FOR XML aninhadas, consulte FOR XML Query Comparado a Consulta FOR XML Aninhada e Criar XML com Consultas FOR XML Aninhadas.
Você pode gerar hierarquias XML que incluem irmãos especificando o modo AUTO aninhado para consultas XML. Para obter mais informações, consulte Gerar irmãos com uma consulta de modo AUTO aninhado.
Independentemente do modo usado, as consultas FOR XML aninhadas fornecem mais controle na descrição da forma do XML resultante. Eles podem ser usados no lugar de consultas no modo EXPLICIT.
Exemplos
Os tópicos a seguir fornecem exemplos de consultas FOR XML aninhadas.
Consulta FOR XML em comparação com uma consulta FOR XML aninhada
Compara uma consulta FOR XML de nível único com uma consulta FOR XML aninhada. Este exemplo inclui uma demonstração de como especificar XML centrado em atributos e em elementos como resultado da consulta.Gerar irmãos com uma consulta de modo AUTO aninhado
Mostra como gerar irmãos usando uma consulta de modo AUTO aninhadaUsar consultas FOR XML aninhadas no ASP.NET
Demonstra como um aplicativo ASPX pode usar FOR XML para retornar XML do SQL Server.Estruturar XML com consultas FOR XML aninhadas
Mostra como usar consultas FOR XML aninhadas para controlar a estrutura de um documento XML criado pelo SQL Server.