【问题标题】:Microsoft Database Project - How to change column type and avoid data loss errorMicrosoft Database Project - 如何更改列类型并避免数据丢失错误
【发布时间】:2021-03-18 07:02:46
【问题描述】:

我正在尝试将列的类型从 VARCHAR 更改为 INT。 在部署过程中,数据库项目会因为“数据丢失”错误而停止部署:

RAISERROR(检测到 N'行。架构更新正在终止,因为可能会发生数据丢失。', 16, 127)

我知道数据是可转换的,如果我运行手动 ALTER TABLE 脚本就可以了。但是,我无法将其与此方案正确集成以避免部署期间的错误。

  1. 您有什么方法可以解决我的问题?
  2. 有没有方法 在数据库项目中覆盖此行为并为此 特殊情况,使用自定义脚本?

【问题讨论】:

    标签: sql-server-data-tools database-project automated-deployment


    【解决方案1】:

    在这种情况下,一种方法是使用 PreDeployment 脚本并部署两次。

    1. 像往常一样更改表定义中的数据类型列

    2. 添加预部署脚本:

      -- 这个脚本必须是幂等的,并在一段时间后删除 如果存在(选择 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'table_name' AND TABLE_SCHEMA = 'schema_name' AND COLUMN_NAME = '列名 AND DATA_TYPE != 'INT' ) 开始 ALTER TABLE schema_name.table_name ALTER COLUMN Column_name INT NULL/NOT NULL; 结束

    首次发布将在 PreDeploy 期间更改数据类型,并且部署将失败并出现潜在的数据丢失错误。

    第二次发布会省略部分PreDeploy(if condition),schema compare没有检测到任何变化,说明已经改变了。

    下一步应该是从 PreDeployment 脚本中删除手动部分。

    【讨论】:

    • 感谢@Lukasz 的支持。虽然它不是一个真正优雅的解决方案,更像是一种解决方法。在这些情况下,我更喜欢手动将其作为单独的补丁进行。
    猜你喜欢
    • 2012-06-14
    • 2023-02-20
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 2018-03-21
    相关资源
    最近更新 更多