Comment puis-je empêcher SSMS de réécrire mon code lors de l'enregistrement d'une vue?


8

Je crée une vue qui utilise une déclaration avec une WHEREclause similaire à ceci:

WHERE
    (
        col1 IS NOT NULL
        OR
        col2 IS NOT NULL
    )
    AND
    NOT EXISTS (SELECT ...)

ce qui prend en moyenne 10 secondes pour fonctionner. Cependant, lorsque j'essaie d'enregistrer cette requête en tant que vue, SQL Server (ou le client MS SQL Server Management Studio) "optimise" la requête pour utiliser cette structure à la place:

WHERE
    (col1 IS NOT NULL AND NOT EXISTS (SELECT ...))
    OR
    (col2 IS NOT NULL AND NOT EXISTS (SELECT ...))

Ralentir la requête à 6+ minutes. Existe-t-il un moyen de désactiver ce comportement, afin que la vue utilise exactement la requête SQL que je lui donne?

Réponses:


14

N'utilisez pas les assistants SSMS.

tapez simplement votre CREATE VIEW dbo.Foo AS SELECT ...instruction dans une nouvelle fenêtre de requête et exécutez-la.

Cela l'empêchera de réorganiser la syntaxe de requête en alternatives sémantiquement équivalentes mais moins performantes.


4
Et toutes les vues, procs stockés, UDF, table, etc. tous les objets créés ou modifiés doivent de toute façon être dans le script afin qu'ils puissent être placés dans le contrôle de code source comme tout autre code.
HLGEM

1
Il existe quelques outils graphiques SQL qui sont décents et ne feront pas de trucs stupides comme ça
Earlz

2
@Earlz true, mais je pense que nous savons tous que nous parlons spécifiquement de SSMS, pas de tous les outils graphiques en général.
Aaron Bertrand
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.