代码之家  ›  专栏  ›  技术社区  ›  Ben Schwehn

经常使用schemabinding和update时如何处理db schema更新

  •  6
  • Ben Schwehn  · 技术社区  · 14 年前

    我使用的是mssqlserverdb,并且使用了大量的视图(用于O/R映射器)。有点烦人的是我想

    • 使用架构绑定

    但遇到这样一个问题:每当我想(例如)向表中添加列时,我必须首先删除引用该表的所有视图,更新该表,然后重新创建视图,即使这些视图不需要以其他方式更新。这使得我的更新脚本更长,而且,查看源代码管理系统中的差异,很难看到实际的相关更改是什么。

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

    • 键入 alter table
    • 检查是否有错误语句,如“ cannot ALTER 'XXX' because it is being referenced by object 'YYY' ."
    • 使用SQL Server Management Studio编写脚本 create 引用对象的代码
    • 插入 drop alter语句之前的语句和create语句之后的语句

    这让我很恼火,但是如果我想继续使用schemabinding和脚本更新的话,也许我不得不接受它。。。

    1 回复  |  直到 14 年前
        1
  •  3
  •   Joe Stefanelli    14 年前

    通过查询一些动态管理函数和系统视图来查找依赖项,至少可以消除“检查是否出错”步骤。 This article 给出了一个很好的解释。除此之外,我认为你是对的,你不能有你的蛋糕和吃它太模式绑定。

    还要记住,删除/创建视图会导致您失去对这些对象授予的任何权限,因此这些权限也应该包含在脚本中。