SSDT 项目发布事务部署

     2023-02-19     30

关键词:

【中文标题】SSDT 项目发布事务部署【英文标题】:SSDT Project publish transactional deployment 【发布时间】:2019-01-27 21:05:22 【问题描述】:

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

据我了解,这是部署过程:

预部署脚本


主要部署


部署后脚本


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

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

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

谢谢。

【问题讨论】:

好问题。我还没有找到一种方法来实现这一点。您可以将部署前脚本和部署后脚本放在自己的事务中,但它不会回滚它运行的所有 DDL。 部署前和部署后脚本在其余事务之外运行。你需要以某种方式推出自己的产品。理想情况下,在测试环境中运行并确保没有外部更改可能是确保一切顺利运行的最佳选择。 【参考方案1】:

您应该简单地在 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

【讨论】:

谢谢,是的,这正是我正在寻找的东西。

简化 SSDT 数据库项目到 localdb 的部署

】简化SSDT数据库项目到localdb的部署【英文标题】:StreamlineddeployofSSDTDatabaseProjecttolocaldb【发布时间】:2015-08-1722:52:07【问题描述】:如果你在VS2015中有一个SSDT数据库项目设置为启动项目,它会在你按下F5时执行构建和部署========... 查看详情

SQL Server 2012 SSDT“无法将项目部署到......无法建立连接......”

】SQLServer2012SSDT“无法将项目部署到......无法建立连接......”【英文标题】:SQLServer2012SSDT"Theprojectcouldnotbedeployedto....Aconnectioncannotbemade...."【发布时间】:2014-09-1611:37:09【问题描述】:我是SQLServer2012的新手。这是我的情况... 查看详情

使用 SSDT 进行自定义表比较和部署

】使用SSDT进行自定义表比较和部署【英文标题】:CustomtablecompareanddeploymentusingSSDT【发布时间】:2014-03-2104:02:51【问题描述】:我陷入了这样一种情况,即我的SSDT/数据库项目中存在的数据库架构具有较少的架构,而生产数据库... 查看详情

部署 SQL SSDT 项目时如何跟踪数据更改

】部署SQLSSDT项目时如何跟踪数据更改【英文标题】:HowtotrackdatachangeswhendeployingaSQLSSDTproject【发布时间】:2017-12-0122:35:02【问题描述】:我们使用SSDTDACPAC部署升级数据库。开发人员在VisualStudio2015中处理项目,并根据需要修改架... 查看详情

SSDT 在没有任何更改时删除并重新创建表

...题描述】:我正在使用SSDT数据库项目为我的数据库创建部署脚本。每次部署运行时,都会删除其中一张表[AdrInfo].[IL],然后重新创建。项目文件中表的定义没有任何变化。表定义:CREATETABLE[AdrInfo].[IL]([I 查看详情

创建发布预览时出现 SSDT 发布错误

...一个包含我们的数据库架构的.sqlproj文件。该架构已成功部署数十次。当尝试发布到一个特定的目标数据库时,“创建发布预览”步骤似乎失败,但没有给出错误。预览的输出包括一些预期的警告:正在删除列. 查看详情

tSQLt + SSDT 集成到 Jenkins

...Jenkins中对其进行了配置,但在运行我的tSQLt测试用例之前部署它时遇到了问题。请参考我用来配置所有内容的链接:https://the 查看详情

如何将 DACPAC 部署到事务复制数据库

】如何将DACPAC部署到事务复制数据库【英文标题】:HowtodeployDACPACstotransactionreplicateddatabases【发布时间】:2021-09-3004:06:41【问题描述】:我正在通过SqlPackage.exe将DACPAC部署到在SQLServer中具有大量事务复制的数据库服务器。DACPAC是... 查看详情

Visual Studio 2019 - SSDT

...负载,以便我可以访问SSDT,以便我可以创建ReportingServices项目。单击文件>新建>项目时,我无法创建s-s-rS/SSIS/SSAS项目?我的印象是,在安装过程中选择“数据存储和处理”时,现在会自动安装这些。如何安 查看详情

如何在 SSDT 项目中跳过构建 DACPAC

】如何在SSDT项目中跳过构建DACPAC【英文标题】:HowtoskipbuildingaDACPACinanSSDTproject【发布时间】:2017-06-0912:03:51【问题描述】:在我的解决方案中,我有一个SSDT项目。每次我构建我的解决方案时,都会有一行说明:1>Database-><... 查看详情

新的 DBProject 创建说项目类型不可用,即使安装了 SSDT

】新的DBProject创建说项目类型不可用,即使安装了SSDT【英文标题】:NewDBProjectcreationsaysProjecttypenotavailableeventhoughSSDTisinstalled【发布时间】:2015-10-1612:11:18【问题描述】:我正在尝试在VisualStudio2013中创建数据库项目。我已安装SSDT... 查看详情

SSDT 很长时间加载项目和未解决的参考

】SSDT很长时间加载项目和未解决的参考【英文标题】:SSDTverylongtotimetoloadprojectandunresolvedreferences【发布时间】:2016-10-0409:20:04【问题描述】:您好,我在使用SSDT时遇到了真正的问题,特别是在我将机器迁移到Windows2012并升级到VS... 查看详情

SSDT - 交叉应用 OPENJSON

】SSDT-交叉应用OPENJSON【英文标题】:SSDT-CROSSAPPLYOPENJSON【发布时间】:2016-06-2711:55:48【问题描述】:尝试在SSDT中编写存储过程,如下所示:CREATEPROCEDUREResponse.TransformHotel@RequestIDsRequest.RequestIDsREADONLYASBEGININSERTINTOresponse.HotelSELECTEven... 查看详情

SSDT - 不更改用户权限,但更改表权限?

...【发布时间】:2019-05-0714:27:05【问题描述】:发布数据库项目时,我想授予/撤销对对象(例如视图或表)的权限,这些对象是构建中定义的对象。我不希望SSDT考虑用户权限。例如,当删除表文件中的权限时,我希望它只更改构... 查看详情

在 SQL Server 2012 SSDT 解决方案中引用 CLR 项目

】在SQLServer2012SSDT解决方案中引用CLR项目【英文标题】:ReferencingCLRProjectinSQLServer2012SSDTSolution【发布时间】:2012-05-0814:27:18【问题描述】:我正在尝试使用SSDT将SQLServer2008dbproj升级到SQLServer2012sqlproj。一切似乎都正常,接受解决方... 查看详情

SSDT 的自定义模板

...】:2013-01-3009:29:26【问题描述】:为SQLServerDataTools数据库项目存储customItemTemplate的正确文件夹名称是什么?例如。它应该位于C:\\Users\\accountname\\Documents\\VisualStudio11\\Templates\\ItemTemplates下的哪个子文件夹S 查看详情

ssdt :使用表创建脚本保存数据

...:53:28【问题描述】:我正在为现有数据库创建一个数据库项目,并希望将表创建脚本及其插入脚本放在一起。我试过了CREATETABLE[dbo].[t1]([ID]INTIDENTITY(1,1)NOTNULL,[Desc]NVARCHAR(100)NOTNULL)GOSET 查看详情

dotconnectfororaclev9.1发布,新增ssdt-bi项目模板

新功能:增加SSDT-BI项目模板,用于分析服务、报告服务和集成服务,且在VisualStudio2015中支持新增在SSISDataFlow中对MicrosoftSQLServer2016的支持在OracleSqlStatementCollection中实现IEnumerable,ICollection和IList三种接口Oracle10g及更高的替代引用字... 查看详情