【问题标题】:VS2010 Database Project Deployment, to fail if data loss may occur or not?VS2010 数据库项目部署,如果可能发生数据丢失会失败吗?
【发布时间】:2011-04-15 15:51:03
【问题描述】:

我有一个用于 Web 应用程序的数据库项目,目前我已将其配置为在部署期间可能发生数据丢失时失败。我觉得这样更安全。但是我遇到了一个问题。实际上,我需要在一些我可以接受可能的数据丢失的事情上部署更改,即缩短列长度,实际上不会删除任何内容,但系统认为会这样做。

我有 2 个问题。

首先是这样:除了启用或禁用 catch all go 或 no go 之外,有没有办法对此过程进行更精细的控制,即指定可以删除或缩短的列?有什么方法可以更精细地控制这个过程?

第二个是,你们如何处理这些情况?最初我希望添加一个预部署脚本来删除列就足够了,但是它似乎也可以捕获这些文件中的删除等。

【问题讨论】:

  • 不是部署引擎解析预部署脚本并“抓到”,问题是架构比较在预部署脚本之前运行,因此生成的部署脚本包含检查和 raiserror如果表包含行。打开生成的 SQL 脚本就可以看到。

标签: visual-studio-2010 sql-server-2008 database-project


【解决方案1】:
  1. 很遗憾,没有任何方法可以更精细地控制它。
  2. 当我知道我将部署会导致数据丢失但正是我想要的东西时,我禁用它。然后我重新启用它。此外,我总是会检查部署到生产环境时出现的更改脚本。

【讨论】:

  • 如何禁用它?
【解决方案2】:

只需将预部署脚本中的列更新为截断长度?

例如:将我的 col 截断为 20:

UPDATE mycol = LEFT(mycol, 20)
FROM mytable
WHERE mycol != LEFT(mycol, 20)

【讨论】:

  • 这种方法可能存在的问题是架构比较在预部署脚本之前运行,因此如果表包含行,您的发布脚本可能仍包含检查和 raiserror。
【解决方案3】:

微软的指导是在部署前将数据移出到临时表中,让部署引擎运行检查表是否包含行(这将通过,因为它现在是空的)并升级架构,并在部署后脚本中将数据移回。

有关更多信息,请参阅巴克莱山关于该主题的帖子:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 1970-01-01
    • 1970-01-01
    • 2016-12-12
    • 2015-10-22
    相关资源
    最近更新 更多