代码之家  ›  专栏  ›  技术社区  ›  Josh M.

Visual Studio 2010 SQL Server 2008数据库项目-自定义更新

  •  0
  • Josh M.  · 技术社区  · 15 年前

    在Visual Studio中,假设您有一个SQL 2008数据库项目,并且向表中添加了一个不可为空的列。当您现在部署数据库时,如果该表中有数据,它将失败。(对吧?)如何编写自定义逻辑,以便在更新期间可以将此列设置为“x”,或使用更高级的查询或光标更新整个表并填充新列?这是您只希望发生一次的事情—同时将列添加到数据库中。有人支持吗?

    5 回复  |  直到 15 年前
        1
  •  1
  •   A-K    15 年前

    我将添加一个可以为空的列,运行UPDATE命令来填充它,并将该列更改为不为空。虽然我确实使用Visual Studio 2010,但我不使用它进行部署。相反,我使用SQL Compare进行部署-它生成一个SQL脚本,很容易调整。

        2
  •  1
  •   Simone Aiken    14 年前

    我就是这样做的。

    [first_name]        varchar( 32 )   NOT NULL default ' ',
    [last_name]         varchar( 32 )   NOT NULL default ' ',
    

    因为他们有一个* 默认值* 它们可以成功部署。

        3
  •  0
  •   Randy    15 年前
    update mytable
    set newcolumn = 'x'
    where newcolumn is null;
    
        4
  •  0
  •   Community Mohan Dere    9 年前

    我做了很多研究 this type of topic 不幸的是,这似乎是VSDB项目缺乏的领域。一个开始寻找的好地方是 Visual Studio ALM Rangers guide 对于VSDB项目;他们有一个实践实验室,详细介绍了他们推荐的最佳实践,以便准确地完成您的要求(这涉及到使用部署前和部署后脚本将数据复制到临时表和从临时表复制数据)。此外,巴克莱希尔的博客还有 article 与您的问题(他是数据工具的高级项目经理)相关,与指南相同。

    在我看来,如果您必须能够更新目标数据库的多个不同版本,那么这个推荐的方法的维护成本非常高,但是如果您只有一个数据库(或架构的一个版本)要更新,那么它是非常可行的。

        5
  •  0
  •   Josh M.    15 年前

    这就是我最后做的。

    1. 将版本信息添加到数据库(例如,在SystemSettings表中)。
    2. 为下一个版本创建脚本(例如1.1.0.0.sql)。
    3. 在Scripts\Post Deployment\Script.PostDeployment.sql文件中,添加以下内容:

    声明@versionMajor INT;
    声明@versionMinor INT;
    声明@versionBuild INT;
    声明@versionRevision INT;

    选择前1
    @versionMajor=版本major,
    @versionMinor=版本号,

    @versionRevision=版本修订


    IF(@versionMajor<=1和@versionMinor<1)

    :r“..\Upgrade\1.1.0.0.sql”
    结束

    推荐文章