SSDT transactional publish?

。_饼干妹妹 提交于 2019-12-21 21:09:01

问题


Using msbuild with SSDT, I have tried IncludeTransactionalScripts, but it seems to only put each statement in an individual transaction. Is it possible to publish multiple database projects as a transaction? If not, can I at least make sure that each Project is published within a transaction?


回答1:


For anybody else who found this question, but didn't know where to look:

There is a publish setting, "Include transactional scripts", that begins a transaction at the start of the publish script. It then wraps each schema change in the script in an error check. On errors, the transaction is rolled back and an error log is incremented, but then the transaction is started from scratch. If there is no error, the transaction continues uncommitted

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

At the end, if errors have been registered, the whole transaction is rolled back:

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

Note (as in the comments above) that this doesn't include your pre-/post-deployment scripts, so you should be careful to wrap these separately


The link below is to Peter Schott's blog - it's same guy who commented above I think - thanks :)

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

He explains nicely how to configure these settings when using SSMS


Using Visual Studio 2015, I found that the "Include transactional scripts" setting was not set by default. You have to select this when defining the Publish settings ([Build]>>[Publish {project name} ...]) under the [Advanced...] tab:



来源:https://stackoverflow.com/questions/26501987/ssdt-transactional-publish

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!