Formattazione delle istruzioni SQL [duplicate]

0

Negli ultimi anni ho sviluppato l'abitudine di formattare la query% sq_de% SQL in questo modo:

SELECT
    fieldNames
FROM
    sources
    JOIN tableSource ON col1 = col2
    JOIN (
        SELECT
            fieldNames
        FROM
            otherSources
     ) AS subQuery ON subQuery.foo = col2
WHERE
    someField = somePredicate

Quindi vedi il mio pattern: ogni parola chiave è sulla sua stessa riga e i campi di quella parola chiave sono rientrati di 1 tab-stop e il pattern è usato in modo ricorsivo per le sottoquery.

Funziona bene per tutte le mie query SELECT , poiché massimizza la leggibilità anche se al costo dello spazio verticale; ma non funziona per cose come SELECT e INSERT che hanno una sintassi radicalmente diversa.

INSERT INTO tableName
       (  col1,   col2,   col3,   col4,   col5,   col6,   col7,   col8  )
VALUES ( 'col1', 'col2', 'col3', 'col4', 'col5', 'col6', 'col7', 'col8' ),
VALUES ( 'col1', 'col2', 'col3', 'col4', 'col5', 'col6', 'col7', 'col8' )

UPDATE tableName
SET
    col1 = 'col1',
    col2 = 'col2',
    col3 = 'col3',
    // etc
WHERE
    someField = somePredicate

Come puoi vedere, non sono così belli, e quando hai a che fare con tabelle con un sacco di colonne diventano rapidamente non soddisfacenti.

C'è un modo migliore per formattare UPDATE e INSERT ? E per quanto riguarda le dichiarazioni UPDATE e altre operazioni?

    
posta Dai 16.06.2013 - 12:21
fonte

1 risposta

1

Non penso che l'esempio di aggiornamento che hai fornito sia davvero diverso dall'istruzione Select. Mantenere un campo per riga funziona indipendentemente dal numero.

L'istruzione di inserimento è un'altra questione. L'esempio che hai dato non è qualcosa che va in produzione per la maggior parte dei programmi. Questo potrebbe essere un modo per convertire i valori in una tabella di riferimento. Di solito è uno script per la gestione dei dati. Per un'applicazione, i valori sono generalmente impostati su un parametro.

Insert into MyTable(Field1) Values(@Field1Value);

Come molte altre cose, questo è facile da gestire quando si hanno alcuni campi, ma quando si ha molto, diventa un problema. Penso che la chiave per qualsiasi soluzione sia un modo per gestire la relazione uno a uno con l'elenco dei campi e i valori. Mantenere un numero ragionevole su ciascuna riga (3-8 a seconda della lunghezza dei nomi) finché si è coerenti. Un altro vantaggio dei parametri è che i loro nomi possono avere molto più significato se sono vicini al nome del campo (penso che il mio esempio lo raggiunga).

Se la lista degli inserti diventa troppo lunga, è meglio tirare quei valori da un file esterno (testo, foglio di calcolo) che ha una sorta di struttura di denominazione dei campi:

Insert into MyTable (Field1)
select OtherField1 from ExternalSourceFile.

Mi rendo conto che la domanda vuole essere gestita in una vera e propria istruzione di codice, ma la digitazione dei dati in qualcosa di simile a un foglio di calcolo è più semplice da visualizzare e gestire e il codice è molto più facile da leggere. Inoltre, puoi modificare i dati senza dover modificare l'istruzione sql.

    
risposta data 16.06.2013 - 13:34
fonte

Leggi altre domande sui tag