我创建了一个从复杂查询中的多个表中进行选择的视图。
- 由于复杂性,我创建了插入/更新/删除 INSTEAD OF 触发器来处理视图上的这些操作。
- 我还创建了更新视图的存储过程。
当我构建 VS2010 数据库项目时,SQL 脚本按以下顺序包含 CREATE 命令:(1) 视图,(2) 存储过程,然后 (3) 触发器。
现在,当我运行部署脚本时,出现错误:
*** SQL01268 D:\scripts\vs2010\Database.sql (28494,0).Net SqlClient Data Provider:
Msg 4405, Level 16, State 1, Procedure MyViewSave, Line 18 View or function 'MyView' is
not updatable because the modification affects multiple base tables
如果在存储过程之前创建触发器,就不会有问题。
如何确保在存储过程之前创建触发器?
谢谢!
您可能遇到了 Visual Studio 2010 的一个已知问题:
也就是说,Microsoft 建议您通过以下方式帮助 Visual Studio 检测它似乎在其部署脚本中忽略的对象依赖项:
因此,如果您正在开发的所有内容都位于
dbo
模式中,请确保在 proc 和视图名称前面加上它们的模式名称会给您带来麻烦。例如:dbo.MyView
而不仅仅是MyView
. 当您右键单击一个对象时,Visual Studio 的“重构”菜单下有一个“完全限定名称”功能,可以帮助您快速完成此操作。如果这没有帮助,请谷歌一下,看看上面链接的页面上建议的一些解决方法。让我们知道最终对您有用的是什么。