none
Select UNION ALL com ORDER BY RRS feed

  • 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...

    quinta-feira, 17 de maio de 2012 18:08

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

    segunda-feira, 21 de maio de 2012 21:29
    Moderador

Todas as Respostas

  • Tenta tirar o ORDER BY antes do UNION ALL

    ve se da certo


    Érica erica.tohoma@gmail.com

    quinta-feira, 17 de maio de 2012 18:34
  • 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]

    sexta-feira, 18 de maio de 2012 18:11
  • 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

    segunda-feira, 21 de maio de 2012 21:29
    Moderador