0

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

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

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

  1. 你有什么办法解决我的问题?
  2. 是否有一种方法可以在数据库项目中覆盖此行为,对于这种特殊情况,请使用自定义脚本?
4

1 回答 1

0

在这种情况下,一种方法是使用 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 脚本中删除手动部分。

于 2020-12-19T16:07:53.967 回答