Conheça também: Onmasters . Ofertas . Divulgue! . Vai.la . Geraboleto . Baixa.la . Assista.la . Joga.la
» Início » Desenvolvimento » Banco de dados e SQL » SQL Server 2005 New Features: A cláusula FOR XML -->
 
Avaliação: | Publicado em: 31/01/2007
SQL Server 2005 New Features: A cláusula FOR XML


A opção XMLSCHEMA

A produção de esquemas XDR pode ser interessante para trabalhar com uma aplicações legadas e com padrões XML proprietários (XDR é padrão Microsoft). Seria mais interessante, e recomendado pela própria Microsoft, trabalhar com padrões mais abertos. O padrão oficial recomendado pelo W3C para validação de documentos XML é o XML Schema Definition (XSD). A opção XMLSchema produz o documento XML e uma definição XSD. Ao contrário da opção XMLData é possível especificar o elemento raiz e substituir o elemento <row> se for necessário.

SELECT TOP 1
    EstadoSigla AS UF,
    EstadoNome AS Nome
FROM
    Estado
FOR XML RAW('Estado'), ROOT('Estados'), XMLSCHEMA

O XML produzido contém tanto o documento XML quanto o seu esquema de validação no padrão XML Schema.

<Estados>
  <xsd:schema targetNamespace="urn:schemas-microsoft-com:sql:SqlRowSet2" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" elementFormDefault="qualified">
    <xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" schemaLocation=
"http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd" />
    <xsd:element name="Estado">
      <xsd:complexType>
        <xsd:attribute name="UF" use="required">
          <xsd:simpleType>
            <xsd:restriction base="sqltypes:char" sqltypes:localeId="1033" sqltypes:sqlCompareOptions="IgnoreCase IgnoreNonSpace IgnoreKanaType IgnoreWidth">
              <xsd:maxLength value="2" />
            </xsd:restriction>
          </xsd:simpleType>
        </xsd:attribute>
        <xsd:attribute name="Nome">
          <xsd:simpleType>
            <xsd:restriction base="sqltypes:varchar" sqltypes:localeId="1033" sqltypes:sqlCompareOptions="IgnoreCase IgnoreNonSpace IgnoreKanaType IgnoreWidth">
              <xsd:maxLength value="30" />
            </xsd:restriction>
          </xsd:simpleType>
        </xsd:attribute>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <Estado xmlns="urn:schemas-microsoft-com:sql:SqlRowSet2" UF="AC" Nome="Acre" />
</Estados>

A opção TYPE

O SQL Server 2005 possui o tipo de dados XML*. A opção TYPE transforma o resultado de uma instrução SELECT com FOR XML em um tipo de dados XML. Embora a utilização da cláusula FOR XML já retorne um XML, ela retorna texto puro se utilizada de forma aninhada. Isso será abordado no próximo tópico.

* Esse tipo de dados será abordado em um artigo posterior


CLAUDIO DE CARVALHO <CLAUDIOCARVALHO@DEVIR.COM.BR>
Ajudou-me bastante ter o entendimento do assunto.
Ok, o documento é realmente muito esclarecedor. Porém estou com dificuldades para gerar isto em uma stored procedure. Realmente o FOR XML apenas pode ser usado para saida direta ao client? Não estou vendo uma saída prática para isto. Obrigado
Muito bom os comentários sobre a questão do uso do XPath, agora a dificuldade encontro quando estou armazenando informações em XML e gostaria de atualizá-las via XPath em um Campo Text por exemplo, ainda não encontrei uma forma de atualizar algum valor de um elemento baseado do ID de uma linha por exemplo. tipo ainda não encontrei uma função ou procedure que faça uma tarefa de fazer por exemplo um comando do tipo :
Update tabela_fisica set
campoxml = updatexml(campoxml,'Regiao/UF/Nome/Municipio',valornovo)
WHERE equals_path(campoxml,'Regiao/Nome') = 'Centro Oeste' and
equals_path(campoxml,'Regiao/UF') = 'GO' and equals_path(campoxml,'Regiao/UF/MUNICIPIO') = 'Araçu' por exemplo
Ainda estou a procura para o Uso no SQL Server 2000 senao tiver no 2005 server ???
aline carare candido <alinecarrare@hotmail.com>
bom de mais
Jose Orlando Rocha <orocha@correios.com.br>
Estou buscando importar arquivos XML para um banco de dados de uma aplicação que estamos desenvolvendo.
Pelo que li e entendi, penso que com o artigo poderei fazer a importação. Rocha