Database SSDT-数据库版本之间的数据迁移

Database SSDT-数据库版本之间的数据迁移,database,sql-server-2012,sql-server-data-tools,Database,Sql Server 2012,Sql Server Data Tools,是否有更好的方法来处理使用SSDT的数据库版本之间的数据迁移 我们在SSDT中开发了一个大型数据库项目,使用部署后脚本将数据插入/合并到数据库中 现在我们面临着处理更新的问题。我们不能使用合并脚本来更新数据,因为在某些情况下,我们需要操作已经存在的数据,因此必须实现自定义更新脚本 我研究了一个使用dacpac版本号的解决方案,并验证了要运行哪些更新脚本,但我意识到这个解决方案有缺点 到目前为止我拥有的(伪代码): 上述解决方案的缺点是我不能在IF语句中使用GO语句,我们的一些代码可能需要在语句块

是否有更好的方法来处理使用SSDT的数据库版本之间的数据迁移

我们在SSDT中开发了一个大型数据库项目,使用部署后脚本将数据插入/合并到数据库中

现在我们面临着处理更新的问题。我们不能使用合并脚本来更新数据,因为在某些情况下,我们需要操作已经存在的数据,因此必须实现自定义更新脚本

我研究了一个使用dacpac版本号的解决方案,并验证了要运行哪些更新脚本,但我意识到这个解决方案有缺点

到目前为止我拥有的(伪代码):

上述解决方案的缺点是我不能在IF语句中使用GO语句,我们的一些代码可能需要在语句块中运行脚本


还有没有办法从SSDT项目中获取“DacVersion”作为命令变量?

我见过一些人将其存储在表中,然后从表中引用它。这可能比尝试设置和读取DACPAC版本更容易。另一种可能性是确保所有脚本都可以重新运行(在插入之前检查是否存在,等等)。可能很难检查数据是否存在,例如,如果用户可以更改数据。
CREATE Procedure [dbo].[#GetDatabaseVersion](
@DbVersion NVARCHAR(64) OUTPUT)
AS
BEGIN
    select @DbVersion = type_version from msdb.dbo.sysdac_instances_internal where     instance_name = '$(DatabaseName)'
    RETURN
END


DECLARE @DbVersion NVARCHAR(64)
EXEC #GetDatabaseVersion @DbVersion = @DbVersion OUTPUT

IF @DbVersion = '2.4.0.0'
BEGIN
  --Do some data manipulation
END

IF @DbVersion = '2.5.0.0'
BEGIN
  --Do some more data manipulation
END