【发布时间】:2011-04-12 14:33:12
【问题描述】:
我正在使用 MS SQL Server,我想通过执行类似“alter view VIEWNAME as ([some sql])”之类的方法来更改存储过程中的视图。
google 抛出的几页断言不直接支持这一点(相关的 alter-table 语句也不支持),但也有一些示例说明如何使用这样的结构来解决它:
declare @sql varchar(max)
select @sql = 'alter view VIEWNAME as ([some sql])'
exec(@sql)
将代码编写为文字字符串有点味道,即使对于 SQL 也是如此。
我的问题:
- 为什么不支持?从 sproc 运行它和作为独立语句运行它有什么区别?
- 为什么通过
execing 文字 SQL 字符串的变通方法有效?我对exec语句的理解是,它只是执行SQL in-line,对吗? - (不乐观)有没有更好的方法从存储过程中更改视图?
【问题讨论】:
-
ALTER VIEW必须是批处理中的唯一语句。我想这只是为了便于解析。当您运行EXEC时,它会作为不同的批次运行。 -
“易于解析”对于一个所谓的企业级数据库套件来说似乎有点过分了! :) 除非有某种原因无法解析?似乎不太可能..
-
为什么要更改 SP 中的视图? (而不是将您的处理分成几个阶段或拥有多个视图)
-
我们不想将任意模式更新权限授予执行此操作的进程。这里的视图用作指向两个后备表的间接层,我们更新“其他”一个,然后在完成时摆动视图。整个事情都是事务性的。
-
@jjk:但是当您可以通过查询实现相同的目标时,为什么还要使用视图呢?另外,当您说“摆动”视图时,您的意思是您从中进行选择吗?
标签: sql sql-server stored-procedures alter-table sql-view