Почему я не могу создать представление внутри блока BEGIN... END

Этот код не работает, возвращая ошибку:

BEGIN
  CREATE VIEW [dbo].[dummy] AS SELECT 1 AS Dummy
END
GO`

Incorrect syntax near the keyword 'VIEW'.

Почему?

Примечания:

  • Наличие инструкции GO кажется, не имеет значения

  • Внутренний оператор отлично работает за пределами разделителей кода.

  • Это часть более крупного запроса, но тестируется в изоляции так же, как и представленный здесь.

Ответ 1

Это потому, что CREATE VIEW должен быть первым оператором в пакете, как описано в этой ссылке MSDN.

Вместо этого вы можете сделать: например.

.....
    BEGIN 
        EXECUTE('CREATE VIEW [dbo].[dummy] AS SELECT 1 AS Dummy')
    END

Ответ 2

Вы можете использовать три способа создания временного представления.

1- Ответ AdaTheDev.

2 - создайте временную таблицу, затем вставьте в нее значение, например, create Table #TableName (ID integer). См. эту ссылку

3- Использование выражения Common Table [With]. См. эту ссылку