Sql ReadyRoll项目:SemVer选项
我正在尝试使用ReadyRoll项目进行自动化部署。我创建的上一个项目在导入数据库后生成的第一个迁移脚本中,如果TYPE_ID(N'[dbo].[abc_PrintType]')为NULL,则具有以下。我想知道哪个选项签入项目属性以生成同一行代码Sql ReadyRoll项目:SemVer选项,sql,sql-server,redgate,readyroll,Sql,Sql Server,Redgate,Readyroll,我正在尝试使用ReadyRoll项目进行自动化部署。我创建的上一个项目在导入数据库后生成的第一个迁移脚本中,如果TYPE_ID(N'[dbo].[abc_PrintType]')为NULL,则具有以下。我想知道哪个选项签入项目属性以生成同一行代码 GO PRINT N'Print types' GO IF TYPE_ID(N'[dbo].[abc_PrintType]') IS NULL CREATE TYPE [dbo].[abc_PrintType] AS TABLE (...) 您正在寻
GO
PRINT N'Print types'
GO
IF TYPE_ID(N'[dbo].[abc_PrintType]') IS NULL
CREATE TYPE [dbo].[abc_PrintType] AS TABLE
(...)
您正在寻找的选项是添加对象存在性检查 通过在.sqlproj文件的
节点下添加以下代码,可以在项目中启用此功能:
真的
下次导入更改时,生成的脚本将包含IF EXISTS…
style-guard子句
有关如何配置的更多信息,请参阅ReadyRoll文档:
感谢您提供的解决方案。没有其他方法可以检查此选项吗?我在.sqlproj文件中启用了相同的方法。问题是我以前的迁移不会运行,因为目标数据库中已经存在所有存储的进程、表。我的目标数据库发生了更改,我希望导入相同的更改。刷新后,项目会显示“Build&Deploy Required”,并且不会让我部署项目,因为目标数据库中已经存在对象。如果是第一次部署到数据库,则需要在项目中设置基线。这涉及到将迁移放在1.0.0版本文件夹中,并按照文档中的描述打开semver:鉴于很难判断当前环境的状态,我建议重新开始:1。在数据库中备份试图在Octopus中部署的uu MigrationLog表,并将其从数据库中删除(如果存在)。按照以下文档中的描述在项目中设置基线:3。提交对源代码管理的更改,将新包构建并部署到OctopusI,这样OctopusI就能够解决这个问题。我创建了第二个项目,因为第一个项目一团糟。Octopus在第一个项目中创建的数据库仍然存在,其中包含该数据库中的所有对象。因此,即使我在第二个项目中设置基线,它也会给我一个错误,即对象仍然存在。我删除了从db服务器创建的第一个数据库,并对其进行了备份。