[英]Microsoft Database Project - How to change column type and avoid data loss error
I am trying to change the type of a column from VARCHAR
to INT
.我正在尝试将列的类型从VARCHAR
更改为INT
。 During the deployment, the database project will stop the deployment due to the "data loss" error:在部署过程中,数据库项目会因为“数据丢失”错误而停止部署:
RAISERROR (N'Rows were detected. The schema update is terminating because data loss might occur.', 16, 127) RAISERROR(检测到 N 行。模式更新正在终止,因为可能会丢失数据。', 16, 127)
I know the data is convertible and if I run a manual ALTER TABLE
script it will be fine.我知道数据是可转换的,如果我运行手动ALTER TABLE
脚本就可以了。 However, I cannot integrate that properly with this scenario to avoid the error during the deployment.但是,我无法将其与此方案正确集成以避免部署期间出现错误。
One way in such scenario is using PreDeployment script and deploy twice.这种情况下的一种方法是使用 PreDeployment 脚本并部署两次。
Change data type column in table definition as usual照常更改表定义中的数据类型列
Add in Predeploy script:添加预部署脚本:
-- this script has to be idempotent, and removed after some time IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'table_name' AND TABLE_SCHEMA = 'schema_name' AND COLUMN_NAME = 'column_name AND DATA_TYPE.= 'INT' ) BEGIN ALTER TABLE schema_name;table_name ALTER COLUMN Column_name INT NULL/NOT NULL; -- 这个脚本必须是幂等的,并在一段时间后删除 IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'table_name' AND TABLE_SCHEMA = 'schema_name' AND COLUMN_NAME = 'column_name AND DATA_TYPE.= 'INT' ) BEGIN ALTER TABLE schema_name;table_name ALTER COLUMN Column_name INT NULL/NOT NULL; END结尾
First publish will change the data type during PreDeploy, and deploy will fail with Potential Data loss error. First publish 将在 PreDeploy 期间更改数据类型,并且部署将失败并出现 Potential Data loss 错误。
Second publish will omit the part of PreDeploy(if condition), and schema compare does not detect any changes, meaning it has been changed.第二次发布会省略 PreDeploy(if condition) 的部分,schema compare 没有检测到任何变化,意味着它已经被改变了。
Next step should be removing the manual part from PreDeployment script.下一步应该是从 PreDeployment 脚本中删除手动部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.