Почему SQL Server не может изменить вид в сохраненной процедуре?

StackOverflow https://stackoverflow.com/questions/3716546

Вопрос

Я использую MS SQL Server, и я хотел бы изменить вид из в хранимой процедуре, выполнив что-то вроде «ALTER Viewname ImeSname как ([некоторые SQL])».

Несколько страниц, выброшенные Google Assert, что это не поддерживается напрямую (и ни один из них не связаны с изменением альтернонты), но есть также примеры того, как работать вокруг него, используя такие конструкции:

declare @sql varchar(max)
select @sql = 'alter view VIEWNAME as ([some sql])'
exec(@sql)

Написание кода как буквальные строки пахнут немного, даже для SQL.

Мои вопросы:

  1. Почему это не поддерживается? Какая разница между запуском этого из шПоката и запущена его в качестве автономной оператора?
  2. Почему обходной путь через execЛитеративная работа SQL String? Мое понимание exec Заявление заключается в том, что он просто выполняет строку SQL, это неверно?
  3. (Не оптимистично) Есть ли лучший способ внести изменения на вид в хранимой процедуре?
Это было полезно?

Решение

Я думаю, что ответы:

  1. MS хочу предотвратить работу DDL из процедур.
  2. Код в пределах Заявление Exec не рассматривается как часть процедуры - поэтому он не подвержен той же ограничениям, что и процедура.
  3. Нет.

Альтернативный подход может быть отдельную таблицу (называемое что-то вроде swing_table) с 1 или 0 записями для указания того, должен ли представление запрашивать производство или другую (резервную копию?) Таблицу соответственно - что-то вроде:

create view viewname as
select {field list}
from production_table
cross join swing_table
union all
select {field list}
from backup_table
where (select count(*) from swing_table) = 0

- Тогда усейте swing_table в процедуре, когда вы хотите, eRM, качайте таблицу - поскольку усеченность не является командой транзакции, она должна выполняться немедленно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top