7
votes

Appliquer les normes SQL au script

J'ai le script suivant et j'aimerais changer de manière à ce que cela accepte les normes internationales. J'utilise SQL-Server mais dans la mesure du possible, j'aimerais suivre les normes internationales pour SQL. Je ne crois pas que les crochets soient standard - dois-je les remplacer par des guillemets doubles?

Sans payer pour obtenir une copie du document de normalisation Existe des ressources sur Internet qui donnent des exemples de scripts formatés et disposés exactement comme requis par les normes? p> xxx pré>


edit strong> p>

Ma seule légère préférence qui n'est pas classique n'est pas la norme classique. Suivant. Cela a été mis en avant par Aaronbertrand et je suis d'accord pour dire que c'est plus lisible - surtout si la clause SELECT CODE> a 20 ou 30 champs: P>

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 


3 commentaires

En pratique, vous pouvez utiliser sqlfiddle.com et voir si votre requête (ou un petit sous-ensemble de celui-ci) fonctionne sans se plaint sur toutes les bases de données que SQLFidDle.com prend en charge: MSSQL, Oracle, MySQL, Postgres, SQLite.


+1 pour se soucier des normes


UPPED votre commentaire (.... Tu m'as commencé à m'occuper des normes)


4 Réponses :


7
votes

Changer ISNULL code> à coalesce code> et des crochets sur " code>, puis Il valide .

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; 


9 commentaires

+1 Pour une belle explication et références - Hommage que le Mimer ne me donne pas en réalité de code corrigé plutôt que de l'emplacement des erreurs.


En termes de mise en forme, à part mes doigts, y a-t-il des outils qui peuvent rapidement normaliser le formatage de mes scripts?


@WhyTheq - Il n'y a pas de normes internationales pour le formatage, seule la syntaxe. Il existe divers jolies commerciaux. Comme SQL Jolie imprimante ou redgate Invite SQL.


Martin - Je suppose s'il n'y a pas de lacunes dans le nom de champ, il est correct de simplement utiliser B.Measurey plutôt que b. "Gesesty" ?


@WhyTheq - oui n'est pas requis dans ce cas. Rechercher des ici pour le SQL 92 règles


Martin - Actuellement, ce document est trop technique pour moi - je vais continuer à y retourner de temps à autre et je suis sûr que cela commencera à avoir un sens. Par exemple sur quelle page mentionne-t-il en utilisant " pour ?


@WhyTheq - vous n'utilisez pas " pour utilisé pour délimiter . Vous pouvez simplement l'exécuter via le validateur Mimer. Il échoue Niveau d'entrée 92 Comme les identificateurs doivent être Tout le majuscule mais valide contre le niveau intermédiaire 92 (et valide contre le noyau SQL 2003)


Martin - Cela me semble plus facile de comprendre PDF de 1999


@WhyTheq - Merci pour le lien. On dirait que cela pourrait être utile.



2
votes

Un bon formateur T-SQL gratuit en ligne est http://www.tsqltidy.com/ , c'est-à-dire pour SQL Server. Soyez prudent car votre pare-feu peut soudainement alerté d'une attaque d'injection SQL (une erreur de pare-feu en utilisant le site pour une attaque). Sinon, des outils commerciaux disposent de capacités de formatage - SQL complète (Devart) et Invite SQL (Porte rouge).

comme pour "SQL STANDARD SQL", ce serait davantage d'un site de blog de sa propre. Quelle standard ANSI (1992, SQL3, ...) et à quel niveau?

peut vous aider avec les guillemets cependant, utilisez défini citation_Identifier sur; Avant votre SQL, puis éteignez ensuite (définissez cité_dentifiant éteint;). Cela signifie que vous n'avez pas besoin de le changer pour toute la base de données. Mais, c'est une bonne idée de ne pas utiliser d'identificateurs avec des espaces et des caractères non standard (comme c # avec code comme "... Nouveau type d'objet que je viens de faire ~ () ..." - ne serait pas très pratique). < / p>

Est-ce que cela compte comme 2 réponses et une autre question?


2 commentaires

+1 merci pour l'info - je vais passer un peu de temps à vérifier sqltidy


... J'ai ajouté une édition de l'OP qui montre pourquoi Tsqltidy ne fonctionnera probablement pas pour moi



1
votes

Voici une bonne liste de ressources pour les normes SQL avec différents documents et tout: http://gerardnico.com/wiki/language/sql/ansi

Si vous recherchez un formateur T-SQL pour votre code existant, vous pouvez également consulter refacteur Apexsql . C'est un plugin SSMS gratuit similaire à SQL Promt de Red Gate.


0 commentaires

0
votes

Une autre excellente ressource est la COP SQL, qui est un outil gratuit qui identifie les problèmes et suggère les meilleures pratiques:

http://sqlcop.lessstthandot.com/


0 commentaires