SSDT 项目发布事务部署
SSDT Project publish transactional deployment
我正在使用 SQLPackage.exe 实用程序和数据库项目的发布配置文件来对 SQL 服务器数据库进行 运行 更改。
根据我的理解,这是部署过程:
预部署脚本
主要部署
Post-部署脚本
我在发布配置文件高级设置中选中了 "Include transactional scripts" 选项,但是,这似乎仅适用于主要部署部分。
我的问题是:如果主部署失败,是否提交预部署脚本?此外,如果 Post-部署脚本失败,是否提交预部署更改和主部署更改?
是否可以制作发布脚本"Atomic" - 一切都作为一个整体成功或失败?
谢谢。
您只需在预脚本中打开事务并在 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
Post 脚本:
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
我正在使用 SQLPackage.exe 实用程序和数据库项目的发布配置文件来对 SQL 服务器数据库进行 运行 更改。
根据我的理解,这是部署过程:
预部署脚本
主要部署
Post-部署脚本
我在发布配置文件高级设置中选中了 "Include transactional scripts" 选项,但是,这似乎仅适用于主要部署部分。
我的问题是:如果主部署失败,是否提交预部署脚本?此外,如果 Post-部署脚本失败,是否提交预部署更改和主部署更改?
是否可以制作发布脚本"Atomic" - 一切都作为一个整体成功或失败?
谢谢。
您只需在预脚本中打开事务并在 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
Post 脚本:
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