我正在使用 MS SQL Server,我想通过执行类似“alter view VIEWNAME as ([some sql])”之类的东西来更改存储过程中的视图。
谷歌抛出的几页断言不直接支持这一点(相关的 alter-table 语句也不支持),但也有一些示例说明如何使用如下结构来解决它:
declare @sql varchar(max)
select @sql = 'alter view VIEWNAME as ([some sql])'
exec(@sql)
将代码编写为文字字符串有点味道,即使对于 SQL 也是如此。
我的问题:
- 为什么不支持这个?从 sproc 运行它和作为独立语句运行它有什么区别?
- 为什么通过
exec
ing 文字 SQL 字符串的解决方法有效?我对exec
语句的理解是,它只是内联执行 SQL,这是不正确的吗? - (不乐观)有没有更好的方法来从存储过程中更改视图?