gpt4 book ai didi

sql - 为什么 SQL Server 不能更改存储过程中的 View ?

转载 作者:行者123 更新时间:2023-12-03 00:37:55 25 4
gpt4 key购买 nike

我正在使用 MS SQL Server,并且我想通过执行“alter view VIEWNAME as ([some sql])”之类的操作来更改存储过程中的 View 。

谷歌抛出的一些页面断言这不被直接支持(相关的 alter-table 语句也不受支持),但也有一些示例说明如何使用如下结构来解决它:

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

将代码编写为文字字符串有点难闻,即使对于 SQL 也是如此。

我的问题:

  1. 为什么不支持此功能?从存储过程运行它和作为独立语句运行它有什么区别?
  2. 为什么通过exec文字 SQL 字符串的解决方法有效?我对 exec 语句的理解是它只是内联执行 SQL,这是不正确的吗?
  3. (不乐观)是否有更好的方法从存储过程中更改 View ?

最佳答案

我认为答案是:

  1. MS 希望阻止 DDL 在程序内运行。
  2. exec 语句内的代码不被视为过程的一部分 - 因此它不受与过程相同的限制。
  3. 没有。

另一种方法可能是使用一个单独的表(称为 swing_table),其中包含 1 或 0 条记录,以指示 View 是否应分别查询生产表或其他(备份?)表 - 类似于:

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 - 因为 TRUNCATE 不是事务命令,所以它应该立即执行。

关于sql - 为什么 SQL Server 不能更改存储过程中的 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3716546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com