如何在使用模式绑定和经常更新时处理数据库模式更新

时间:2010-08-04 20:48:51

标签: sql-server code-generation version-control

我正在使用MS SQL Server数据库并使用大量视图(用于O / R映射器)。有点烦恼是我想

  • 使用架构绑定
  • 使用脚本进行更新(在服务器上部署并放入源控制系统)

但遇到的问题是每当我想要时,例如向表中添加一列,我必须首先删除引用该表的所有视图,更新表,然后重新创建视图,即使视图不需要更新。这使我的更新脚本更长,并且,在源控制系统中查看差异时,更难以看到实际的相关更改是什么。

有没有更好的方法来解决这个问题?

我还需要能够使用简单且可源代码控制的sql更新。 SQL Server Management Studio中包含的代码生成器会很有用,但我遇到了SQL Server Management Studio的问题,因为它倾向于创建不指定某些索引或(默认)约束的名称的代码。但是当我在不同的系统上运行我的脚本时,我希望有相同的dbs,包括所有约束的名称等,这样我在以后更新这些约束时就不必跳过循环了。

所以也许一个更智能的SQL代码生成器可以解决方案吗?

我的工作流程现在是:

  • 在查询编辑器中输入alter table语句
  • 检查我是否收到类似“cannot ALTER 'XXX' because it is being referenced by object 'YYY'。”的错误陈述。
  • 使用SQL Server Managment Studio编写引用对象的create代码
  • 在alter语句前插入drop语句,在
  • 后插入create语句
  • 检查drop语句是否产生错误并重复

这让我很烦,但如果我想继续使用架构绑定和脚本更新,也许我只需要忍受它......

1 个答案:

答案 0 :(得分:3)

通过查询一些动态管理功能和系统视图来查找依赖项,您至少可以消除“检查是否出现错误”步骤。 This article给出了如何做到这一点的正确解释。除此之外,我认为你是对的,你不能吃蛋糕,也不能用图案装订来吃它。

另请注意,删除/创建视图会导致您丢失在这些对象上授予的任何权限,因此这些权限也应包含在您的脚本中。