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>