Usuário com melhor resposta
Select UNION ALL com ORDER BY

Pergunta
-
USE [EvolutionGR]
GO
/****** Object: StoredProcedure [dbo].[gr_sp_mon_caixa_empresa_ligada_historico] Script Date: 05/16/2012 15:50:49 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[gr_sp_mon_caixa_empresa_ligada_historico](@dt_movto_de datetime = NULL,
@dt_movto_ate datetime = NULL,
@id_externo int = NULL,
@nr_conta numeric(20,0) = NULL,
@tp_natureza char(1) = NULL)
as
begin
set nocount on
-- Empresa / Data / Cta Orig / Cta Dest / Natureza / Cta Cor / Valor / Histórico
select '<root>'
union all
select '<registro>' +
'<id_externo>' + cast(a.id_externo as varchar(10)) + '</id_externo>' +
'<ds_abreviado>' + isnull(rtrim(c.ds_abreviado), '') + '</ds_abreviado>' +
'<dt_transferencia>' + convert(char(10), a.dt_transferencia, 103) + '</dt_transferencia>' +
'<nr_conta_origem>' + cast(a.nr_conta_origem as varchar(20)) + '</nr_conta_origem>' +
'<nr_conta_destino>' + cast(a.nr_conta_destino as varchar(20)) + '</nr_conta_destino>' +
'<tp_natureza>' + isnull(a.tp_natureza, '') + '</tp_natureza>' +
'<tp_conta>' + isnull(b.tp_conta, '') + '</tp_conta>' +
'<vl_transferencia>' + dbo.gr_fc_mascara_valor('###.##', isnull(vl_transferencia, 0)) + '</vl_transferencia>' +
'<ds_historico>' + isnull(ds_historico, '') + '</ds_historico>' +
'</registro>'
from gr_tb_mon_caixa_empresa_ligada_historico a (nolock)
join gr_tb_mesa_empresas_renda_fixa_contas b (nolock) on b.nr_conta = a.nr_conta_origem
join gr_tb_mesa_empresas_renda_fixa c (nolock) on c.id_externo = b.id_externo
where (a.dt_transferencia >= @dt_movto_de or @dt_movto_de is null)
and (a.dt_transferencia <= @dt_movto_ate or @dt_movto_ate is null)
and (a.id_externo = @id_externo or @id_externo is null)
and (a.nr_conta_origem = @nr_conta or @nr_conta is null)
and (a.tp_natureza = @tp_natureza or @tp_natureza is null)
union all
select '</root>'
end
Tentei assim para ordenar...
USE [EvolutionGR]
GO
/****** Object: StoredProcedure [dbo].[gr_sp_mon_caixa_empresa_ligada_historico] Script Date: 05/16/2012 15:50:49 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[gr_sp_mon_caixa_empresa_ligada_historico](@dt_movto_de datetime = NULL,
@dt_movto_ate datetime = NULL,
@id_externo int = NULL,
@nr_conta numeric(20,0) = NULL,
@tp_natureza char(1) = NULL)
as
begin
set nocount on
-- Empresa / Data / Cta Orig / Cta Dest / Natureza / Cta Cor / Valor / Histórico
Select '<root>'
Union all
select t.registro from (Select '<registro>' +
'<id_externo>' + cast(a.id_externo as varchar(10)) + '</id_externo>' +
'<ds_abreviado>' + isnull(rtrim(c.ds_abreviado), '') + '</ds_abreviado>' +
'<dt_transferencia>' + convert(char(10), a.dt_transferencia, 103) + '</dt_transferencia>' +
'<nr_conta_origem>' + cast(a.nr_conta_origem as varchar(20)) + '</nr_conta_origem>' +
'<nr_conta_destino>' + cast(a.nr_conta_destino as varchar(20)) + '</nr_conta_destino>' +
'<tp_natureza>' + isnull(a.tp_natureza, '') + '</tp_natureza>' +
'<tp_conta>' + isnull(b.tp_conta, '') + '</tp_conta>' +
'<vl_transferencia>' + dbo.gr_fc_mascara_valor('###.##', isnull(vl_transferencia, 0)) + '</vl_transferencia>' +
'<ds_historico>' + isnull(ds_historico, '') + '</ds_historico>' +
'</registro>' as registro
From gr_tb_mon_caixa_empresa_ligada_historico a (nolock)
join gr_tb_mesa_empresas_renda_fixa_contas b (nolock) on b.nr_conta = a.nr_conta_origem
join gr_tb_mesa_empresas_renda_fixa c (nolock) on c.id_externo = b.id_externo
Where (a.dt_transferencia >= @dt_movto_de or @dt_movto_de is null)
and (a.dt_transferencia <= @dt_movto_ate or @dt_movto_ate is null)
and (a.id_externo = @id_externo or @id_externo is null)
and (a.nr_conta_origem = @nr_conta or @nr_conta is null)
and (a.tp_natureza = @tp_natureza or @tp_natureza is null)
order by a.dt_transferencia) as t
Union all
Select '</root>'
end
Da erro:
Msg 1033, Level 15, State 1, Procedure gr_sp_mon_caixa_empresa_ligada_historico, Line 32
The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP or FOR XML is also specified.Agradeço ajuda, isso esta me tirando o sono...
Respostas
-
Alexandre,
Vocë está reinventando a roda aqui... Para gerar um XML de dados de tabelas os comandos de FOR XML é a melhor opção.
Select Campo1, Campo2 from Tabela Where campo1 = 111 order by Campo1 FOR XML AUTO, ELEMENTS
Faça um teste e nos informe depois...
Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008
- Marcado como Resposta Heloisa Pires terça-feira, 5 de junho de 2012 17:44
Todas as Respostas
-
-
Alexandre,
Quando trabalhamos, com Views, Funções InLine, Union All, não podemos utilizar o Order By em cada Select, somente no último.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
-
Alexandre,
Vocë está reinventando a roda aqui... Para gerar um XML de dados de tabelas os comandos de FOR XML é a melhor opção.
Select Campo1, Campo2 from Tabela Where campo1 = 111 order by Campo1 FOR XML AUTO, ELEMENTS
Faça um teste e nos informe depois...
Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008
- Marcado como Resposta Heloisa Pires terça-feira, 5 de junho de 2012 17:44