我正在使用MS SQL Server,并且想通过执行“将viewname更改为([somesql])”之类的东西来更改存储过程中的视图。
google抛出的一些页面断言,它不直接受支持(也没有相关的alter-table语句),但是也有一些示例,说明了如何使用如下构造方法来解决此问题:
declare @sql varchar(max) select @sql = 'alter view VIEWNAME as ([some sql])' exec(@sql)
以文字字符串形式编写代码有一点气味,即使对于SQL来说也是如此。
我的问题:
exec
我认为答案是:
一种替代方法是使用一个单独的表(称为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
-然后,在程序中执行TRUNCATE swing_table时,erm,摆动表-由于TRUNCATE不是事务性命令,因此应立即执行。