2013-02-05 12 views
7

Ho il seguente script e vorrei modificarlo in modo che sia conforme agli standard internazionali. Io uso SQL-Server ma, quando possibile, mi piacerebbe seguire gli standard internazionali per SQL. Non credo che le parentesi quadre siano standard - dovrei sostituirle con virgolette doppie?Applicare gli standard SQL allo script

Senza pagare per ottenere una copia del documento standard ci sono risorse su Internet che forniscono esempi di script formattati e disposti esattamente come richiesto dagli standard?

SELECT 
    a.UserAccountKey, 
    SUM(ISNULL(b.[measure Y],0.0)) AS "measure Y", 
    SUM(ISNULL(c.[measure Z],0.0)) AS "measure Z" 
FROM 
    XXX a 
    LEFT OUTER JOIN YYYY b ON 
     a.UserAccountKey = b.UserAccountKey 
    LEFT OUTER JOIN ZZZZ c ON 
     a.UserAccountKey = c.UserAccountKey 
GROUP BY 
    a.UserAccountKey 

EDIT

Il mio unico leggera preferenza che non è standard classico è il seguente. Questa è stata avanzata dal AaronBertrand e sono d'accordo che è più leggibile - soprattutto se la clausola SELECT ha 20 o 30 campi:

SELECT 
    a.UserAccountKey, 
    "measure Y"    = SUM(ISNULL(b."measure Y",0.0)), 
    "measure Z"    = SUM(ISNULL(c."measure Z",0.0)), 
    "measure longertitle" = SUM(ISNULL(c."measure longertitle",0.0)), 
    "me short"    = SUM(ISNULL(c."me short",0.0)) 
FROM 
+0

In pratica, si potrebbe usare sqlfiddle.com e vedere se la query (o piccolo sottoinsieme di esso) funziona senza lamentarsi su tutti i database supportati da sqlfiddle.com: MSSQL, Oracle, MySQL, Postgres, SQLite – mvp

+3

+1 per la cura degli standard –

+0

aumentato il tuo commento (....hai iniziato a preoccuparmi degli standard) – whytheq

risposta

7

Change ISNULL a COALESCE e parentesi quadre per " e poi it validates.

SELECT a.UserAccountKey, 
     SUM(COALESCE(b."measure Y", 0.0)) AS "measure Y", 
     SUM(COALESCE(c."measure Z", 0.0)) AS "measure Z" 
FROM XXX a 
     LEFT OUTER JOIN YYYY b 
     ON a.UserAccountKey = b.UserAccountKey 
     LEFT OUTER JOIN ZZZZ c 
     ON a.UserAccountKey = c.UserAccountKey 
GROUP BY a.UserAccountKey; 

Questo significa che è necessario assicurarsi che QUOTED_IDENTIFIER è ON in SQL Server.

+0

+1 per spiegazioni e riferimenti chiari - peccato che il mimatore non mi dia effettivamente il codice corretto piuttosto che solo dove si trovano gli errori. – whytheq

+0

in termini di formattazione, a parte le mie dita, ci sono alcuni strumenti che possono rapidamente standardizzare la formattazione dei miei script? – whytheq

+0

@whytheq - Non ci sono standard internazionali per la formattazione, solo sintassi. Ci sono vari stimolatori commerciali. Come SQL Pretty Printer o Redgate SQL Prompt. –

2

Un buon formattatore T-SQL online gratuito è http://www.tsqltidy.com/, ad esempio per SQL Server. Attento al fatto che l'amministratore del firewall potrebbe essere improvvisamente avvisato di un attacco SQL Injection (alcuni firewall si sbagliano usando il sito per un attacco). Altrimenti ci sono strumenti commerciali con funzionalità di formattazione: SQL Complete (DevArt) e SQL Prompt (Red Gate).

Per quanto riguarda "International Standard SQL", sarebbe più un blog di un proprio sito. Quale standard ANSI (1992, SQL3, ...) ea quale livello?

Tuttavia, è possibile utilizzare le virgolette con SET QUOTED_IDENTIFIER; prima del tuo SQL, e poi spegni in seguito (SET QUOTED_IDENTIFIER OFF;). Ciò significa che non è necessario accenderlo per l'intero database. Ma è una buona idea NON usare identificatori con spazi e caratteri non standard (proprio come C# con codice come "... nuovo tipo di oggetto che ho appena inventato ~() ..." - non sarebbe molto pratico).

Questo conta come 2 risposte e un'altra domanda?

+0

+1 grazie per le informazioni - passerò un po 'di tempo a controllare sqltidy – whytheq

+0

... Ho aggiunto una modifica dell'OP che mostra perché tsqltidy probabilmente non funzionerà per me – whytheq

1

Ecco una buona lista di risorse per gli standard SQL con diversi documenti e tutto: http://gerardnico.com/wiki/language/sql/ansi

Se siete alla ricerca di un formattatore T-SQL per il vostro codice esistente è possibile anche verificare ApexSQL Refactor. È un plugin SSMS gratuito simile a SQL Promt di Red Gate.

0

Un'altra grande risorsa è SQL Cop, che è uno strumento gratuito che identifica i problemi e suggerisce le migliori pratiche:

http://sqlcop.lessthandot.com/

Problemi correlati