2013-07-23 170 views
6

我是SQL Server数据库工具的新手,可能会对后期部署脚本正在做什么做出错误的假设。所以纠正我,如果我错了。ssdt post部署脚本运行一次

据我所知后部署脚本将有望每个部署后运行,而不仅仅是一个单一的部署。

如果我想有运行的脚本只有一次后部署脚本是有办法做到这一点,而不需要同时在时,这些脚本已经跑了日志的数据库版本或历史表?

I.e.我是否可以对脚本进行后续修改作为项目中添加版本号的新文件添加,并将其添加到后期部署脚本中,但是会忽略以前的脚本(可能没有先删除它)?无论它是否仍在部署期间运行脚本?

是否有这种事情的配置,或者是这种无意的行为?

回答

8

预部署和部署后脚本旨在在您每次发布项目时运行。你的最佳实践是使它们可重复。添加检查,以便如果数据已经存在,则不会再次运行或类似。你可以建立一些基本的日志表来存储它 - 如果在表中找不到行,运行脚本并将行放在表中。

你不能告诉的项目,如果不存在多个脚本,因为他们都建成一个大PreDeploy.sql或PostDeploy.sql文件只运行最新版本的脚本。你需要在每个部分/脚本中有一些东西来告诉它在哪里查看是否运行。这可能是一个现有的数据检查,表格检查,版本检查或其他内容,但它需要知道某处用来知道是否运行。

没有办法比注释掉脚本或通过SQLCMD变量或其他检查,处理它们以某种方式来关闭这个功能等。那些仍然会要求你编写每个脚本应该运行的方式。如果您在Pre/Post Deploy脚本中提供了一个或两个您想要完成的内容,我们可能会提供一些更好的指导。

对于我们来说,我们做脚本可重复使用,并删除他们,因为他们一直在运行。它们仍然处于源代码管理中,或者您可以在删除它们之前使用快照来存储该版本的项目。

+0

你的回答是好的,这就是我所期待的,我只是想知道如果SSDT可能有“运行一次”一些配置,但它无法知道这个问题的答案自身。 – Pricey

+1

我不知道有这样的配置。项目如何知道在任何给定的数据库上“没有运行一次”,而没有一些表或其他方式来引用正在执行的工作? –