2017-01-16 2 views
1

Es ist in Ordnung, ein gemeinsames Format zu haben, ich habe meins, ich und mein Team verwenden das gleiche Format beim Schreiben von SQL.Gibt es eine Möglichkeit, zu verhindern, dass SQL Server meine Ansichtsabfrage automatisch formatiert?

Jetzt ist hier das Problem: Wir verwenden SQL Server. Ich schrieb eine lange Sicht, um mich daran zu erinnern, was ich tat, öffnete ich das "Design" dieser Ansicht. Und mir ist aufgefallen, dass SQL Server mein Format völlig durcheinander gebracht hat und es selbst angewendet hat. Noch schlimmer, dupliziere einfache Bedingungen und mache sie länger ohne Grund (vielleicht urteile ich ein bisschen zu schnell ... aber ...)

Hier ist mein Beispiel, tut mir leid, es ist eine sehr lange Bedingung, Sie don ‚t, es zu lesen, nur das Format fest:

WHERE      (STATUT_CAND IN (2, 3)) 
    AND 
         (DATE_DISPO < GETDATE() OR DATE_DISPO IS NULL) 
    AND 
         ((SELECT  COUNT(ID_CAND) AS Expr1 
          FROM   Paie.dbo.PAI_CAND_RESULT_ENTREVUE AS pcre 
          WHERE  (ID_CAND = PC.ID_CAND)) > 0) 
    AND 
         ((SELECT  COUNT(MATR) AS Expr1 
          FROM   Paie.dbo.PAI_DOS_EMPL AS PAI_DOS_EMPL_1 
          WHERE  (MATR = PC.MATR) AND (ETAT = 'C14' OR 
                 ETAT = 'C15' OR 
                 ETAT = 'E1') OR 
                 (MATR = PC.MATR) AND (ETAT LIKE 'A%' OR 
                 ETAT LIKE 'P%' OR 
                 ETAT LIKE 'S%') AND (STAT_ENG = 'E1' OR 
                 STAT_ENG = 'P1' OR 
                 STAT_ENG = 'G1')) <= 0) 
    AND 
         (NOT EXISTS 
         (SELECT  ID_CAND 
          FROM   Paie.dbo.PAI_CAND_EMPL AS PAI_CAND_EMPL_1 
          WHERE  (ID_CAND = PC.ID_CAND) AND (MOTIF_EXCLUS IS NOT NULL) AND (MOTIF_EXCLUS NOT IN ('0')))) 
    AND     (NOT EXISTS 
         (SELECT  MOT_ABS 
          FROM   Paie.dbo.PAI_DOS_PMNT_ABS AS PAI_DOS_PMNT_ABS_1 
          WHERE  (MATR = PC.MATR) AND (MOT_ABS = '15' OR 
                MOT_ABS = '16' OR 
                MOT_ABS = '40' OR 
                MOT_ABS = '41' OR 
                MOT_ABS = '45' OR 
                MOT_ABS = '46' OR 
                MOT_ABS >= '52' AND MOT_ABS <= '57') OR 
                (MATR = PC.MATR) AND (MOT_ABS = '01') AND (CODE_PMNT >= 103522 AND CODE_PMNT <= 103541 OR 
                CODE_PMNT = 103572 OR 
                CODE_PMNT = 103573 OR 
                CODE_PMNT = 103577))) 
    AND     (NOT EXISTS 
         (SELECT  STAT_ENG 
          FROM   Paie.dbo.PAI_DOS_EMPL AS pados 
          WHERE  (MATR = PC.MATR) AND (DATE_EFF > GETDATE()))) 
    AND     (NOT EXISTS 
         (SELECT  MOTIF_AFF 
          FROM   Paie.dbo.GRH_POSTE_AFFECT AS pados 
          WHERE  (PC.MATR = MATR) AND (MOTIF_AFF LIKE '%S%') AND (DATE_EFF = 
                 (SELECT  MAX(DATE_EFF) AS Expr1 
                  FROM   Paie.dbo.GRH_POSTE_AFFECT AS aff 
                  WHERE  (MATR = PC.MATR))))) 


    AND     (EXISTS 
         (SELECT  MATR 
          FROM   Paie.dbo.PAI_HCHQ_PMNT AS dosem 
          WHERE  (MATR = PC.MATR) AND (DATE_FIN > DATEADD (year , -3 , GETDATE()))) or (select DATE_DERN_PAIE from paie.dbo.PAI_DOS where MATR = PC.MATR) > DATEADD (year , -3 , GETDATE()) or (select DATE_DERN_PAIE from paie.dbo.PAI_DOS where MATR = PC.MATR) is null) 

auf diese Weise, ich weiß, wo die MAIN AND sind, jetzt, wenn ich diese in die Ansicht setzen, das ist, wie SQL Server-Format es:

WHERE  (STATUT_CAND IN (2, 3)) AND (DATE_DISPO < GETDATE() OR 
        DATE_DISPO IS NULL) AND 
         ((SELECT  COUNT(ID_CAND) AS Expr1 
          FROM   Paie.dbo.PAI_CAND_RESULT_ENTREVUE AS pcre 
          WHERE  (ID_CAND = PC.ID_CAND)) > 0) AND 
         ((SELECT  COUNT(MATR) AS Expr1 
          FROM   Paie.dbo.PAI_DOS_EMPL AS PAI_DOS_EMPL_1 
          WHERE  (MATR = PC.MATR) AND (ETAT = 'C14' OR 
                 ETAT = 'C15' OR 
                 ETAT = 'E1') OR 
                 (MATR = PC.MATR) AND (ETAT LIKE 'A%' OR 
                 ETAT LIKE 'P%' OR 
                 ETAT LIKE 'S%') AND (STAT_ENG = 'E1' OR 
                 STAT_ENG = 'P1' OR 
                 STAT_ENG = 'G1')) <= 0) AND (NOT EXISTS 
         (SELECT  ID_CAND 
          FROM   Paie.dbo.PAI_CAND_EMPL AS PAI_CAND_EMPL_1 
          WHERE  (ID_CAND = PC.ID_CAND) AND (MOTIF_EXCLUS IS NOT NULL) AND (MOTIF_EXCLUS NOT IN ('0')))) AND (NOT EXISTS 
         (SELECT  MOT_ABS 
          FROM   Paie.dbo.PAI_DOS_PMNT_ABS AS PAI_DOS_PMNT_ABS_1 
          WHERE  (MATR = PC.MATR) AND (MOT_ABS = '15' OR 
                MOT_ABS = '16' OR 
                MOT_ABS = '40' OR 
                MOT_ABS = '41' OR 
                MOT_ABS = '45' OR 
                MOT_ABS = '46' OR 
                MOT_ABS >= '52' AND MOT_ABS <= '57') OR 
                (MATR = PC.MATR) AND (MOT_ABS = '01') AND (CODE_PMNT >= 103522 AND CODE_PMNT <= 103541 OR 
                CODE_PMNT = 103572 OR 
                CODE_PMNT = 103573 OR 
                CODE_PMNT = 103577))) AND (NOT EXISTS 
         (SELECT  STAT_ENG 
          FROM   Paie.dbo.PAI_DOS_EMPL AS pados 
          WHERE  (MATR = PC.MATR) AND (DATE_EFF > GETDATE()))) AND (NOT EXISTS 
         (SELECT  MOTIF_AFF 
          FROM   Paie.dbo.GRH_POSTE_AFFECT AS pados 
          WHERE  (PC.MATR = MATR) AND (MOTIF_AFF LIKE '%S%') AND (DATE_EFF = 
                 (SELECT  MAX(DATE_EFF) AS Expr1 
                  FROM   Paie.dbo.GRH_POSTE_AFFECT AS aff 
                  WHERE  (MATR = PC.MATR))))) AND EXISTS 
         (SELECT  MATR 
          FROM   Paie.dbo.PAI_HCHQ_PMNT AS dosem 
          WHERE  (MATR = PC.MATR) AND (DATE_FIN > DATEADD(year, - 3, GETDATE()))) OR 
        (STATUT_CAND IN (2, 3)) AND (DATE_DISPO < GETDATE() OR 
        DATE_DISPO IS NULL) AND 
         ((SELECT  COUNT(ID_CAND) AS Expr1 
          FROM   Paie.dbo.PAI_CAND_RESULT_ENTREVUE AS pcre 
          WHERE  (ID_CAND = PC.ID_CAND)) > 0) AND 
         ((SELECT  COUNT(MATR) AS Expr1 
          FROM   Paie.dbo.PAI_DOS_EMPL AS PAI_DOS_EMPL_1 
          WHERE  (MATR = PC.MATR) AND (ETAT = 'C14' OR 
                 ETAT = 'C15' OR 
                 ETAT = 'E1') OR 
                 (MATR = PC.MATR) AND (ETAT LIKE 'A%' OR 
                 ETAT LIKE 'P%' OR 
                 ETAT LIKE 'S%') AND (STAT_ENG = 'E1' OR 
                 STAT_ENG = 'P1' OR 
                 STAT_ENG = 'G1')) <= 0) AND (NOT EXISTS 
         (SELECT  ID_CAND 
          FROM   Paie.dbo.PAI_CAND_EMPL AS PAI_CAND_EMPL_1 
          WHERE  (ID_CAND = PC.ID_CAND) AND (MOTIF_EXCLUS IS NOT NULL) AND (MOTIF_EXCLUS NOT IN ('0')))) AND (NOT EXISTS 
         (SELECT  MOT_ABS 
          FROM   Paie.dbo.PAI_DOS_PMNT_ABS AS PAI_DOS_PMNT_ABS_1 
          WHERE  (MATR = PC.MATR) AND (MOT_ABS = '15' OR 
                MOT_ABS = '16' OR 
                MOT_ABS = '40' OR 
                MOT_ABS = '41' OR 
                MOT_ABS = '45' OR 
                MOT_ABS = '46' OR 
                MOT_ABS >= '52' AND MOT_ABS <= '57') OR 
                (MATR = PC.MATR) AND (MOT_ABS = '01') AND (CODE_PMNT >= 103522 AND CODE_PMNT <= 103541 OR 
                CODE_PMNT = 103572 OR 
                CODE_PMNT = 103573 OR 
                CODE_PMNT = 103577))) AND (NOT EXISTS 
         (SELECT  STAT_ENG 
          FROM   Paie.dbo.PAI_DOS_EMPL AS pados 
          WHERE  (MATR = PC.MATR) AND (DATE_EFF > GETDATE()))) AND (NOT EXISTS 
         (SELECT  MOTIF_AFF 
          FROM   Paie.dbo.GRH_POSTE_AFFECT AS pados 
          WHERE  (PC.MATR = MATR) AND (MOTIF_AFF LIKE '%S%') AND (DATE_EFF = 
                 (SELECT  MAX(DATE_EFF) AS Expr1 
                  FROM   Paie.dbo.GRH_POSTE_AFFECT AS aff 
                  WHERE  (MATR = PC.MATR))))) AND 
         ((SELECT  DATE_DERN_PAIE 
          FROM   Paie.dbo.PAI_DOS 
          WHERE  (MATR = PC.MATR)) > DATEADD(year, - 3, GETDATE())) OR 
        (STATUT_CAND IN (2, 3)) AND (DATE_DISPO < GETDATE() OR 
        DATE_DISPO IS NULL) AND 
         ((SELECT  COUNT(ID_CAND) AS Expr1 
          FROM   Paie.dbo.PAI_CAND_RESULT_ENTREVUE AS pcre 
          WHERE  (ID_CAND = PC.ID_CAND)) > 0) AND 
         ((SELECT  COUNT(MATR) AS Expr1 
          FROM   Paie.dbo.PAI_DOS_EMPL AS PAI_DOS_EMPL_1 
          WHERE  (MATR = PC.MATR) AND (ETAT = 'C14' OR 
                 ETAT = 'C15' OR 
                 ETAT = 'E1') OR 
                 (MATR = PC.MATR) AND (ETAT LIKE 'A%' OR 
                 ETAT LIKE 'P%' OR 
                 ETAT LIKE 'S%') AND (STAT_ENG = 'E1' OR 
                 STAT_ENG = 'P1' OR 
                 STAT_ENG = 'G1')) <= 0) AND (NOT EXISTS 
         (SELECT  ID_CAND 
          FROM   Paie.dbo.PAI_CAND_EMPL AS PAI_CAND_EMPL_1 
          WHERE  (ID_CAND = PC.ID_CAND) AND (MOTIF_EXCLUS IS NOT NULL) AND (MOTIF_EXCLUS NOT IN ('0')))) AND (NOT EXISTS 
         (SELECT  MOT_ABS 
          FROM   Paie.dbo.PAI_DOS_PMNT_ABS AS PAI_DOS_PMNT_ABS_1 
          WHERE  (MATR = PC.MATR) AND (MOT_ABS = '15' OR 
                MOT_ABS = '16' OR 
                MOT_ABS = '40' OR 
                MOT_ABS = '41' OR 
                MOT_ABS = '45' OR 
                MOT_ABS = '46' OR 
                MOT_ABS >= '52' AND MOT_ABS <= '57') OR 
                (MATR = PC.MATR) AND (MOT_ABS = '01') AND (CODE_PMNT >= 103522 AND CODE_PMNT <= 103541 OR 
                CODE_PMNT = 103572 OR 
                CODE_PMNT = 103573 OR 
                CODE_PMNT = 103577))) AND (NOT EXISTS 
         (SELECT  STAT_ENG 
          FROM   Paie.dbo.PAI_DOS_EMPL AS pados 
          WHERE  (MATR = PC.MATR) AND (DATE_EFF > GETDATE()))) AND (NOT EXISTS 
         (SELECT  MOTIF_AFF 
          FROM   Paie.dbo.GRH_POSTE_AFFECT AS pados 
          WHERE  (PC.MATR = MATR) AND (MOTIF_AFF LIKE '%S%') AND (DATE_EFF = 
                 (SELECT  MAX(DATE_EFF) AS Expr1 
                  FROM   Paie.dbo.GRH_POSTE_AFFECT AS aff 
                  WHERE  (MATR = PC.MATR))))) AND 
         ((SELECT  DATE_DERN_PAIE 
          FROM   Paie.dbo.PAI_DOS AS PAI_DOS_1 

Nicht nur ist es fast unmöglich, etwas zu verstehen (persönlich ich nicht) Aber es ist 3 Mal länger als das, das ich schrieb ... Inakzeptabel, gibt es eine Möglichkeit, das automatische Format auszuschalten? Wenn nicht, behalte ich mein Format in einer separaten Datei und kopiere es jedes Mal.

+10

Verwenden Sie nicht den Designer. Es macht schreckliche Dinge zum Formatieren. Klicken Sie einfach mit der rechten Maustaste und "Skript als in neues Fenster erstellen". Es wird Ihre Formatierung beibehalten. –

+6

Verwenden Sie * keine * der visuellen Designer in SSMS; Sie alle machen schreckliche Dinge. –

+0

@SeanLange Also schlagen Sie vor, dass ich das immer mache: Klicken Sie mit der rechten Maustaste auf die Ansicht, Skriptansicht als, ALTER TO, Neues Abfrageeditorfenster? Dies verhindert die automatische Formatierung? –

Antwort

4

Verwenden Sie nicht den Designer. Es macht schreckliche Dinge zum Formatieren. Klicken Sie einfach mit der rechten Maustaste und "Skript als in neues Fenster erstellen". Es wird Ihre Formatierung beibehalten. Und wie Aaron Bertrand bemerkte, solltest du vermeiden, irgendwelche der visuellen Designer zu verwenden.

+0

Ich stimme dir und Aaron zu, sie machen schreckliche Dinge. Aber sagst du, wir sollten nie einen der visuellen Designer benutzen? Wenn ja, warum sind sie dann überhaupt dort? – Joe

+2

Sie arbeiten, aber der Code, den sie produzieren, ist schrecklich. Sie existieren, weil eine Menge Leute ihre eigenen sql nicht schreiben können. –

+0

Es ist wie Access, wenn Sie das Konzept von Relationen verstehen, können Sie es visuell tun und hinterfragen. Aber wenn Sie es manuell tun, wird die Abfrage, die Sie machen werden, wahrscheinlich viel besser sein als die visuelle Verknüpfung –

Verwandte Themen