SSDT交易发布?

时间:2014-10-22 07:04:45

标签: msbuild sql-server-data-tools

使用带有SSDT的msbuild,我尝试过IncludeTransactionalScripts,但它似乎只将每个语句放在一个单独的事务中。 是否可以将多个数据库项目作为事务发布? 如果没有,我是否至少可以确保每个项目都在交易中发布?

1 个答案:

答案 0 :(得分:5)

对于发现此问题的其他人,但不知道在哪里看:

有一个发布设置“包含事务脚本”,它在发布脚本的开头处开始一个事务。然后,它会在错误检查中包装脚本中的每个模式更改。出现错误时,将回滚事务并增加错误日志,但事务从头开始。如果没有错误,则事务继续未提交

BEGIN TRANSACTION

...alter object here

IF @@ERROR <> 0  @@TRANCOUNT > 0
BEGIN
    ROLLBACK;
END

IF @@TRANCOUNT = 0
BEGIN
    INSERT  INTO #tmpErrors (Error)
    VALUES                 (1);
    BEGIN TRANSACTION;
END

最后,如果已注册错误,则回滚整个事务:

IF EXISTS (SELECT * FROM #tmpErrors) ROLLBACK TRANSACTION
GO
IF @@TRANCOUNT>0 BEGIN
PRINT N'The transacted portion of the database update succeeded.'
COMMIT TRANSACTION
END
ELSE PRINT N'The transacted portion of the database update failed.'
GO

注意(如上面的评论中所述)这不包括您的部署前/部署脚本,因此您应该小心地将它们单独包装

下面的链接是Peter Schott的博客 - 我认为上面评论的是同一个人 - 谢谢:)

http://schottsql.blogspot.co.uk/2012/11/ssdt-publishing-your-project.html

他很好地解释了在使用SSMS时如何配置这些设置

使用Visual Studio 2015,我发现默认情况下未设置“包含事务脚本”设置。在[高级...]选项卡下定义发布设置([Build]&gt;&gt; [Publish {project name} ...])时,您必须选择此项:

enter image description here enter image description here