none
identar query de forma dinamica RRS feed

  • Pergunta

  • preciso criar uma forma dinamica de identar uma query. a a query seria passada comoa parâmetro numa proc, por exemplo...

    eu precisaria identificar o que é comando do sql e identar. por exemplo:

    select
    coluan1,
    coluan2
    from
    tabela
    where
    1 = 1

    outro exemplo:

    update
    tabela
    set
    coluan1 = valor
    where
    1 = 1

    outro exemplo:

    delete
    tabela
    where
    1 = 1


    e assim por diante...vejam que os comandos do sql estão "identados" (com quebra de linha).


    é possível?
    sexta-feira, 22 de fevereiro de 2013 17:53

Respostas

  • Rafa,

    Segue uma procedure:

    CREATE

    PROCEDURE dbo.IdentarQueryPorEspaco(@Var VARCHAR(8000))

    AS

    BEGIN

    DECLARE

    @TabelaFinal TABLE

    (

    Codigo

    VARCHAR(8000)

    )

    WHILE

    (LEN(@Var) > 1)

    BEGIN

    IF(CHARINDEX(' ', @Var) > 0)

    BEGIN

    INSERT INTO @TabelaFinal(Codigo) SELECT SUBSTRING(@Var, 0, CHARINDEX(' ', @Var))

    SET @Var = SUBSTRING(@Var, CHARINDEX(' ', @Var) + 1, 80000)

    END

    ELSE

    BEGIN

    INSERT INTO @TabelaFinal(Codigo) SELECT SUBSTRING(@Var, 0, 8000)

    SET @Var = ''

    END

    END

    SELECT

    LTRIM(RTRIM(Codigo)) As Codigo

    FROM

    @TabelaFinal

    END


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    • Marcado como Resposta rafa-martin sexta-feira, 22 de fevereiro de 2013 18:24
    sexta-feira, 22 de fevereiro de 2013 18:09
    Moderador

Todas as Respostas

  • Olá Rafa...

    Aqui você encontra uma discussão sobre o assunto.... com ferramentes gratuitas e pagas.

    Espero ter lhe ajudado.

    Abraço !


    Não esqueça de marcar o post como útil caso tenha te ajudado.

    sexta-feira, 22 de fevereiro de 2013 18:01
  • ferramentas conheço um monte. eu na verdade de um script que "identa" as querys que serão passadas como parametros. eu preciso fazer o que as ferramentas fazem, porém, numa proc.
    sexta-feira, 22 de fevereiro de 2013 18:03
  • Rafa,

    Segue uma procedure:

    CREATE

    PROCEDURE dbo.IdentarQueryPorEspaco(@Var VARCHAR(8000))

    AS

    BEGIN

    DECLARE

    @TabelaFinal TABLE

    (

    Codigo

    VARCHAR(8000)

    )

    WHILE

    (LEN(@Var) > 1)

    BEGIN

    IF(CHARINDEX(' ', @Var) > 0)

    BEGIN

    INSERT INTO @TabelaFinal(Codigo) SELECT SUBSTRING(@Var, 0, CHARINDEX(' ', @Var))

    SET @Var = SUBSTRING(@Var, CHARINDEX(' ', @Var) + 1, 80000)

    END

    ELSE

    BEGIN

    INSERT INTO @TabelaFinal(Codigo) SELECT SUBSTRING(@Var, 0, 8000)

    SET @Var = ''

    END

    END

    SELECT

    LTRIM(RTRIM(Codigo)) As Codigo

    FROM

    @TabelaFinal

    END


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    • Marcado como Resposta rafa-martin sexta-feira, 22 de fevereiro de 2013 18:24
    sexta-feira, 22 de fevereiro de 2013 18:09
    Moderador
  • Retorno:

      SELECT
    TOP
    1
    'Fabrizzio'
    As
    Nome,
    '21'
    As
    Idade 

    Execução:

    EXEC

    dbo.IdentarQueryPorEspaco

    @Var

    =

    '

    SELECT TOP 1 ''Fabrizzio'' As Nome, ''21'' As Idade

    '


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    sexta-feira, 22 de fevereiro de 2013 18:09
    Moderador
  • fabrizzio para o update não rola. seu eu passar uma query como essa set @Var = 'update tabela set coluna1 = ''valor'', coluna2 = 0', o resultado será: 

    update
    tabela
    set
    coluna1
    =
    '1',
    coluna2
    =
    '0'

    veja que está quebrando o sinal de igual e também o valor que deve atualizado no campo. teria q ser assim, para o update:

    update
    tabela
    set
    coluna1 = 'valor',
    coluna2 = '0'

    sexta-feira, 22 de fevereiro de 2013 18:18
  • Rafa,

    Sinceramente não acho que isso seja possivel de forma simples, e a partir dai é melhor partir para um .net ou algo assim. Veja que a partir desta sua ultima postagem não existe mais regra. Algumas que pensei mas não servem:

     - Aspas simples, pode ser um inteiro sem as aspas;

     - Contagem de espaço, não serve pois o valor passado por ter N espaços;

     - Seu numero de colunas pode ser dinamico;

    Enfim, tudo pode ser feito, mas como o SQL ja não é para este proposito, acho que é melhor partir para soluções alternativas.


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    sexta-feira, 22 de fevereiro de 2013 18:22
    Moderador