Visual Studio 2010 部署脚本以错误的顺序创建对象 - 存储过程后触发

Dor*_*man 7 visual-studio deployment sql-server-2008-r2 visual-studio-2010

我创建了一个视图,该视图从复杂查询中的多个表中进行选择。

  • 由于复杂性,我创建了插入/更新/删除 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
Run Code Online (Sandbox Code Playgroud)

如果触发器在存储过程之前创建,就没有问题。

如何确保在存储过程之前创建触发器?

谢谢!

Nic*_*mas 5

您可能遇到了 Visual Studio 2010 的一个已知问题:

也就是说,Microsoft 建议您通过以下方式帮助 Visual Studio 检测它似乎在其部署脚本中忽略的对象依赖项:

模式限定[ing] 涉及依赖关系的对象的名称。

因此,如果您正在开发的所有内容都位于dbo架构中,请确保预先添加 proc 和视图名称,这会给您的架构名称带来麻烦。例如:dbo.MyView而不仅仅是MyView. 当您右键单击一个对象时,Visual Studio 在重构菜单下有一个“完全限定名称”功能,可以帮助您非常快速地完成此操作。

如果这没有帮助,请尝试使用 Google 并查看上面链接页面上建议的一些解决方法。让我们知道最终对您有用的是什么。