Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Preciso ordernar pelo campo, a.dt_transferencia, mas não consigo, alguém pode me ajudar?
Tks
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 = 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>'Alexandre,
Por curiosidade, essa procedure leva quanto tempo para executar?
Oi, bem rapidamente, como um select simples, existem poucos registros.
Não consegui aplicar o order by ainda :( será que devo criar uma tabela temporária?
Obrigado
Tente assim
...
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>'
...Muito obrigado, mas coloquei e deu o seguinte 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.
Código:
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 = 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>'Agradeço ajuda... ta tenso isso, me tirando o sono... :(
Pela mensagem, isto parece uma restrição para criação de PROCEDURES e VIEWS.
>
Pela mensagem, isto parece uma restrição para criação de PROCEDURES e VIEWS.
Vou ler e já dou o feedback
Obrogadp!
Não virou... será q se eu tirar o union all e concatenar o '<root>' em uma variavel em cima do select funcina?
Consegui!
create 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
Declare @str_xml varchar(2000)
set nocount on
-- Empresa / Data / Cta Orig / Cta Dest / Natureza / Cta Cor / Valor / Histórico
select @str_xml = ''
select @str_xml = @str_xml + '<root>'
select @str_xml = @str_xml + '<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) order by convert(datetime, a.dt_transferencia, 103) desc
select @str_xml = @str_xml + '</root>'
select @str_xml
vou ter explicar do meu jeito você pega a ideia e aplica em seu command...
valeu
KUROL3
select * from (
(
select
'meu campo ' as meu_campo,
'campo data sql' as minha_data
from
tabela
)unnion all(
select
'meu campo ' as meu_campo,
'campo data sql' as minha_data
from
tabela
) unnion all(
select
'meu campo ' as meu_campo,
'campo data sql' as minha_data
from
tabela
)) as b order by b.minha_data ASC