Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Identação e Boas Práticas de Projetos em SQL Server

Existe algum referencial específico sobre "boas práticas para a criação de código" em SQL (Server)? Seja de teor metodológico ou reflexivo?

Ouuu, até mesmo, alguém teria um método pessoal que considere mais organizada e de fácil leitura?

Estava escrevendo meus resumos e bateu essa curiosidade.

Atualmente aplico um padrão que, pelo menos para mim, facilita a leitura do código, masss sempre que preciso usar subquerys toda a organização parece se perder com os "TABs extras" -- por isso a curiosidade para conhecer outras práticas.


Exemplo do que geralmente uso:

    SELECT [Coluna1], [Coluna2], SUM([Coluna5]) AS [Nome]
      FROM FCFO

INNER JOIN FLAN
        ON FLAN.CODCFO = FCFO.CODCFO  
 LEFT JOIN TMOV
        ON TMOV.CODCFO = FCFO.CODCFO         
RIGHT JOIN TITMMOV
        ON TITMMOV.IDMOV = TMOV.IDMOV
           AND TITMMOV.CODCOLIGADA = TMOV.CODCOLIGADA

      WHERE Condicao1 = 'x'
            AND Condicao2 = 'y'

  GROUP BY [Coluna1], [Coluna2], [Coluna3], [Coluna4],

Quando uso subquerys alinho o espaçamento do lado esquerdo, massss com subquerys de subquerys todo o alinhamento se perde e fica confuso. :x

Exemplo com subquerys simples no Select:

    SELECT [Coluna1], [Coluna2], IDMOV,
           (    SELECT [Valor]
                  FROM TMOV

            INNER JOIN TMOVRELAC
                    ON TMOVRELAC.IDMOVDESTINO = T.IDMOV

                 WHERE [Condições...]
           ) AS [Coluna3],
           (    SELECT [Valor]
                  FROM TMOV

            INNER JOIN TMOVRELAC
                    ON TMOVRELAC.IDMOVORIGEM = T.IDMOV

                 WHERE [Condições...]
           ) AS [Coluna4]
      FROM TMOV T

      WHERE Condicao1 = 'x'
            AND Condicao2 = 'y'
2 respostas
solução!

Opa Pablo, eu pessoalmente uso assim:

SELECT 
    [Coluna1]
      , [Coluna2]
      , IDMOV,
           (    
        SELECT [Valor]
                FROM TMOV
            INNER JOIN TMOVRELAC
                    ON TMOVRELAC.IDMOVDESTINO = T.IDMOV
            WHERE [Condições...]
           ) AS [Coluna3],
           (    
        SELECT [Valor]
                FROM TMOV
               INNER JOIN TMOVRELAC
                            ON TMOVRELAC.IDMOVORIGEM = T.IDMOV
                    WHERE [Condições...]
           ) AS [Coluna4]
FROM TMOV T
    WHERE Condicao1 = 'x'
       AND Condicao2 = 'y'

isso é uma opiniao pessoal

Eu deixo sempre ,Coluna embaixo do select com um espaço. Isso vacilita tirar e colocar colunas quando estiver editando o SELECT. como a virgula ja esta na frente do campo, nao preciso ficar tirando da coluna de cima se derrepente for a ultima coluna.

Gosto de deixar o FROM bem na linha do SELECT, pra saber que aquele FROM é dela mesmo.

os JOINS eu deixo sempre com o espaço, e o ON tambem, e vou identando pra frente pra sempre saber até onde aquele bloco de codigo vai, e até onde ele para.

E outra coisa, voce sempre pode fazer uma linha pra separar, eu sempre faço isso e vai de voce usar isso ou nao. EU uso nao exatamente pra separar joins ou subqueries, mas quando eu faço tipo um cursor com dezenas de linhas. seria tipo assim:

SELECT 
    [Coluna1]
      , [Coluna2]
      , IDMOV,
------------------------------------------------------------------
--Descrição da SUBQUERY
           (    
        SELECT [Valor]
                FROM TMOV
            INNER JOIN TMOVRELAC
                    ON TMOVRELAC.IDMOVDESTINO = T.IDMOV
            WHERE [Condições...]
           ) AS [Coluna3],
------------------------------------------------------------------
--Descrição da SUBQUERY2
           (    
        SELECT [Valor]
                FROM TMOV
               INNER JOIN TMOVRELAC
                            ON TMOVRELAC.IDMOVORIGEM = T.IDMOV
                    WHERE [Condições...]
           ) AS [Coluna4]
------------------------------------------------------------------
FROM TMOV T
    WHERE Condicao1 = 'x'
       AND Condicao2 = 'y'

Só uma dica, coloca copiar o meu codigo, pq a identação do site alura nao funciona tao bem, e o meu codigo nao esta aqui na resposta, como eu editei.

Agradeço por sua resposta e contribuições. Eu pensava de uma forma um pouco diferente, mas a sua forma de trabalhar pode ser bastante prática.

O uso das linhas é bacana, massss eu, particularmente, acabo evitando por trabalhar com o TOTVS RM, que não considera os hifens "--" como indicativo de comentário e não explica bem o motivo (pelo menos não na mensagem de erro ;-;).

Novamente, agradeço-lhe por sua resposta. ^^