我是SQL Server数据库工具的新手,可能对部署后脚本正在做什么做出错误的假设..如果我错了,请纠正我。
据我所知,预计会在每次部署后运行部署后脚本,而不仅仅是单个部署。
如果我想让部署后脚本运行一个脚本只有一次有一种方法可以做到这一点而不需要数据库中的版本或历史表,这些表在这些脚本已经运行时记录?
即。我是否可以将任何后续的脚本修改添加为项目中的新文件,版本号为on,并将其添加到部署后脚本,但是如何忽略先前的脚本(可能没有先删除它)?无论在部署期间是否仍然运行脚本?
是否存在此类事件的配置或是否是这种意外行为?
答案 0 :(得分:10)
部署前和部署脚本旨在每次发布项目时运行。您的最佳做法是使它们可重复。添加检查,以便在数据已存在的情况下,不再运行或类似的操作。您可以构建某种基本的日志记录表来存储它 - 如果在表中找不到行,则运行脚本并将行放入表中。
如果存在多个脚本,则无法告诉项目仅运行最新版本的脚本,因为它们都内置在一个大型PreDeploy.sql或PostDeploy.sql文件中。你需要在每个部分/脚本中有一些东西可以告诉它在哪里知道是否要运行。这可能是现有的数据检查,表格检查,版本检查或其他,但它需要知道用什么来知道是否运行。
除了通过SQLCMD变量或其他检查以某种方式注释脚本或处理脚本之外,没有办法解决此问题。那些仍然需要你编写每个脚本应该运行的方式。如果您在Pre / Post Deploy脚本中提供一个或两个您想要完成的内容,我们可以提供更好的指导。
出于我们的目的,我们使脚本可以重复使用,并在它们运行时将其删除。它们仍处于源代码管理中,或者您可以在删除项目之前使用快照来存储该版本的项目。