Array
(
)

Atributo nó Raiz For Xml

Riechelmann
   - 11 jan 2016

Boa Tarde
Estou querendo colocar um atributo no nó raiz do xml, usando o for xml, sei como faz em uma tag simples como segue no exemplo, porém não estou conseguindo no nó raiz.
Estou tentando evitar usar um replace no nó Raiz para colocar manualmente o atributo.
Query que monta o Xml
#Código

select top 5
       'atrVenda' as [venda/@Atributo],
       a.venda as 'venda',
	   a.loja  as 'loja',
	   a.caixa as 'caixa'
  from vendas a with(nolock)
  for xml path('Venda'),root('Vendas')

Xml de Resultado
#Código
<Vendas>
  <Venda>
    <venda Atributo="atrVenda">1</venda>
    <loja>1</loja>
    <caixa>1</caixa>
  </Venda>
  <Venda>
    <venda Atributo="atrVenda">2</venda>
    <loja>1</loja>
    <caixa>1</caixa>
  </Venda>
  <Venda>
    <venda Atributo="atrVenda">3</venda>
    <loja>1</loja>
    <caixa>1</caixa>
  </Venda>
  <Venda>
    <venda Atributo="atrVenda">4</venda>
    <loja>1</loja>
    <caixa>1</caixa>
  </Venda>
  <Venda>
    <venda Atributo="atrVenda">5</venda>
    <loja>1</loja>
    <caixa>1</caixa>
  </Venda>
</Vendas>

Riechelmann
   - 11 jan 2016

Consegui fazer mas não na query acima, mas na implementação que eu precisava.
Vou deixar a implementação para quem tiver dúvidas com o For XML um bom exemplo.

#Código

select top 5
       '1.0' as [@Versao],
       'atrVenda' as [venda/@Atributo],
       a.venda as 'venda',
	   a.loja  as 'loja',
	   a.caixa as 'caixa'
  from vendas a with(nolock)
  for xml path('venda'), root('Vendas'), elements


Implementaçaõ para o PAF ECF para Envio dos Dados Redução Z
#Código
select '1.0' as '@Versao',
       (select dbo.SO_NUMERO(x.INSCRICAO_ESTADUAL) as 'Ie',
               dbo.SO_NUMERO(x.INSCRICAO_FEDERAL)  as 'Cnpj',
	           x.RAZAO_SOCIAL                      as 'NomeEmpresarial'
          from parametros x
          for xml path(''), TYPE) as 'Estabelecimento',
	   (SELECT dbo.SO_NUMERO(y.PAFECF_NUMERO_CREDENCIAMENTO_UF) as 'NumeroCredenciamento',
               y.PAFECF_NOME_COMERCIAL                          as 'NomeComercial',
	           y.VERSAO                                         as 'Versao',
	           dbo.SO_NUMERO(y.PAFECF_CNPJ_DESENVOLVEDOR)       as 'CnpjDesenvolvedor',
	           y.PAFECF_NOME_EMPRESARIAL                        as 'NomeEmpresarialDesenvolvedor'
          FROM PARAMETROS y
          for xml path(''), TYPE) as 'PafEcf', 
       (select a.ECF_FABRICACAO as 'NumeroFabricacao',
	           a.ECf_tipo       as 'Tipo',
	           a.ecf_marca      as 'Marca',
	           a.ecf_modelo     as 'Modelo',
	           a.ECF_VERSAOSB   as 'Versao',
			   (select convert(varchar(10),a.movimento,103)       as 'DataReferencia',
                       a.ECF_CRZ                                  as 'CRZ',
	                   a.ecf_coo                                  as 'COO',
	                   a.ecf_Cro                                  as 'CRO',
	                   convert(numeric(15,0),a.VENDA_BRUTA * 100) as 'VendaBrutaDiaria',
	                   convert(numeric(15,0),a.GT_FINAL * 100)    as 'GT',
					   (select x.TOTALIZADOR_PARCIAL                         as 'Nome',
                               convert(numeric(15,0),x.VALOR_ACUMULADO * 100)as 'Valor'
                          from REDUCOES_DETALHES x with(nolock)
                         where x.REDUCAO = a.REDUCAO
                           and x.VALOR_ACUMULADO > 0
					       for xml path('TotalizadorParcial'), TYPE) as 'TotalizadoresParciais'
				   for xml path(''), TYPE) as 'DadosReducaoZ'
	       for xml path(''), TYPE) as 'Ecf'
  from reducoes a with(nolock)
 where a.reducao = 46
  for xml path('ReducaoZ')


Resultado Xml quase completo o arquivo
#Código
<ReducaoZ Versao="1.0">
  <Estabelecimento>
    <Ie>123456789</Ie>
    <Cnpj>123456789</Cnpj>
    <NomeEmpresarial>Empresa Teste</NomeEmpresarial>
  </Estabelecimento>
  <PafEcf>
    <NumeroCredenciamento>123456</NumeroCredenciamento>
    <NomeComercial>AppTEste</NomeComercial>
    <Versao>1.0.0.0</Versao>
    <CnpjDesenvolvedor>123456789</CnpjDesenvolvedor>
    <NomeEmpresarialDesenvolvedor>Empresa Teste</NomeEmpresarialDesenvolvedor>
  </PafEcf>
  <Ecf>
    <NumeroFabricacao>BM123132132132131</NumeroFabricacao>
    <Tipo>ECF-IF </Tipo>
    <Marca>BEMATECH</Marca>
    <Modelo>MP-2100 TH FI</Modelo>
    <Versao>010101</Versao>
    <DadosReducaoZ>
      <DataReferencia>28/12/2015</DataReferencia>
      <CRZ>0289</CRZ>
      <COO>008078</COO>
      <CRO>0041</CRO>
      <VendaBrutaDiaria>40710</VendaBrutaDiaria>
      <GT>75351864</GT>
      <TotalizadoresParciais>
        <TotalizadorParcial>
          <Nome>Can-T</Nome>
          <Valor>3000</Valor>
        </TotalizadorParcial>
        <TotalizadorParcial>
          <Nome>DT</Nome>
          <Valor>1927</Valor>
        </TotalizadorParcial>
        <TotalizadorParcial>
          <Nome>F1</Nome>
          <Valor>35783</Valor>
        </TotalizadorParcial>
        <TotalizadorParcial>
          <Nome>OPNF</Nome>
          <Valor>11000</Valor>
        </TotalizadorParcial>
      </TotalizadoresParciais>
    </DadosReducaoZ>
  </Ecf>
</ReducaoZ>