Como impedir que o SSMS reescreva meu código ao salvar uma exibição?

8

Estou criando uma exibição que usa uma instrução com uma WHEREcláusula semelhante a esta:

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

que leva em média 10 segundos para ser executado. No entanto, quando tento salvar esta consulta como um modo de exibição, o SQL Server (ou o cliente do MS SQL Server Management Studio) "otimiza" a consulta para usar essa estrutura; em vez disso:

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

Retardando a consulta para mais de 6 minutos. Existe alguma maneira de desativar esse comportamento, para que o modo de exibição use exatamente a Consulta SQL que eu forneça?

Zikes
fonte

Respostas:

14

Não use os assistentes do SSMS.

basta digitar sua CREATE VIEW dbo.Foo AS SELECT ...instrução em uma nova janela de consulta e executá-la.

Isso o impedirá de reorganizar a sintaxe da consulta para alternativas semanticamente equivalentes, mas com pior desempenho.

Martin Smith
fonte
4
E todas as visualizações, procs armazenados, UDFs, tabela etc. todos os objetos criados ou alterados devem estar em script de qualquer maneira, para que possam ser colocados no controle de origem como todos os outros códigos.
HLGEM
11
Existem algumas ferramentas SQL gráfica lá fora, que são decentes e não vai fazer coisas estúpidas como esta
Earlz
2
@Earlz é verdade, mas acho que todos sabemos que estamos falando especificamente sobre SSMS, nem todas as ferramentas gráficas em geral.
Aaron Bertrand