我有以下示例方案,我正在寻找一种方法如何在 Sql Server数据库项目中进行适当的升级。
我有4张桌子:
TruckColors
和CarColors
完全相同,所以我想重构一下。
期望的变化:
CarColors
重命名为ColorCodes
Cars.CarColor_Id
重命名为Cars.ColorCode_Id
Trucks.ColorCode_Id
ColorCodes
外键
Trucks.TruckColor_Id
Trucks.TruckColor_Id
列TruckColors
表格我只能做PostDeploy
或PreDeploy
,但也可以:
Trucks.ColorCode_Id
不存在。 Trucks.TruckColor_Id
已被删除所以在升级过程中,我想运行这个特定的脚本:
UPDATE truck
SET truck.ColorCode_Id = newcolor.Id
FROM Trucks truck
INNER JOIN TruckColors truckcolor ON truck.TruckColor_Id = truckcolor.Id
INNER JOIN ColorCodes newcolor ON truckcolor.ColorCode = newcolor.ColorCode
数据已经投入生产,因此不会出现数据损失。 如何使用 Sql Server数据库项目?
实现此目的答案 0 :(得分:1)
诀窍是使用预部署和后部署来完成更改:
在预部署中将您需要的数据保存到临时表中(我会使用实际的表调用mig_blah等),此表应该在项目中,但是您可以在预部署脚本中创建它。
发生表迁移,然后在post post脚本中使用临时中间表中的数据更新表。
下一步部署删除临时中间表。
如果让脚本重新运行,这会让事情变得更容易:
这意味着你不必小心只运行一次这个特定的脚本,你可以根据需要将它取出一些版本(记得创建一个jira票或其他)
另一个有用的是,在预部署之前禁用修改表中的任何外键,并在部署后重新启用,这样您就可以设置所需的任何数据,而无需担心中间状态。数据库:)
希望它有意义 - 我已经在这里写下了可能会更清楚的步骤(https://the.agilesql.club/blog/Ed-Elliott/2015-12-30/Migrating-Data-In-SSDT-Without-Losing-It)
版