Как я могу запретить SSMS переписывать мой код при сохранении представления?

8

Я создаю представление, которое использует оператор с WHEREпредложением, похожим на это:

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

который занимает в среднем 10 секунд для запуска. Однако когда я пытаюсь сохранить этот запрос как представление, SQL Server (или клиент MS SQL Server Management Studio) «оптимизирует» запрос для использования этой структуры, вместо этого:

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

Замедление запроса до 6+ минут. Есть ли способ отключить это поведение, чтобы представление использовало именно тот SQL-запрос, который я ему предоставляю?

Zikes
источник

Ответы:

14

Не используйте мастера SSMS.

просто введите свой CREATE VIEW dbo.Foo AS SELECT ...оператор в новом окне запроса и выполните его.

Это остановит перестановку синтаксиса запроса в семантически эквивалентные, но худшие альтернативы.

Мартин Смит
источник
4
И все представления, хранимые процедуры, пользовательские функции, таблицы и т. Д. Все созданные или измененные объекты должны быть в любом случае в сценарии, чтобы их можно было поместить в систему контроля версий, как и весь другой код.
HLGEM
1
Есть несколько графических инструментов SQL, которые являются приличными и не будут делать глупости вроде этого
Earlz
2
@ Правда, но я думаю, что мы все знаем, что речь идет именно о SSMS, а не обо всех графических инструментах в целом.
Аарон Бертран