gpt4 book ai didi

sql-server - SSDT 项目发布事务部署

转载 作者:行者123 更新时间:2023-12-04 01:53:21 25 4
gpt4 key购买 nike

我正在使用 SQLPackage.exe 实用程序和数据库项目的发布配置文件来运行对 SQL Server 数据库的更改。

根据我的理解,这是部署过程:

预部署脚本

主要部署

部署后脚本

我在发布配置文件高级设置中选中了“包括事务脚本”选项,但是,这似乎仅适用于主部署部分。

我的问题是:如果主部署失败,是否提交了预部署脚本?此外,如果部署后脚本失败,是否正在提交部署前更改和主部署更改?

是否可以将发布脚本制作为“原子” - 一切都作为一个单元成功或失败?

谢谢你。

最佳答案

您应该简单地在 pre 脚本中打开事务并在 post 脚本中提交它。当您设置此设置时,它与 SSDT 生成的代码非常相似。

前置脚本:

IF (SELECT OBJECT_ID('tempdb..#tmpErrors2')) IS NOT NULL DROP TABLE #tmpErrors2
GO
CREATE TABLE #tmpErrors2 (Error int)
GO
SET XACT_ABORT ON
GO
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
GO
BEGIN TRANSACTION
GO



--Your prescript part goes here



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

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

发帖脚本:
GO
IF @@ERROR <> 0
AND @@TRANCOUNT > 0
BEGIN
ROLLBACK;
END

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


GO

IF EXISTS (SELECT * FROM #tmpErrors2) ROLLBACK TRANSACTION
GO
IF @@TRANCOUNT>0 BEGIN
PRINT N'Post/Pre script finished'
COMMIT TRANSACTION
END
ELSE PRINT N'Pre/Post scripts failed'
GO
DROP TABLE #tmpErrors2
GO

关于sql-server - SSDT 项目发布事务部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51952689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com