sql - 如何在事务期间发生错误时回滚
问题描述
我想创建一个事务,它将多个插入语句包含到数据库中的不同表中。我想要实现的是回滚,以防例如插入语句失败。
我现在拥有的是以下内容,但我不确定这是否会表现出我想要的效果。
SET XACT_ABORT ON
BEGIN TRAN
INSERT INTO [FTR].[dbo].[Usr](fname, lname, phonea, addr)
(
SELECT p_code, y_code, y_name, r_coden
FROM [ADS].[Prep].[InfoEm]
)
--
-- other multiple insert statements
--
COMMIT TRAN
如果任何插入语句失败,甚至可能是选择语句,此查询是否会回滚。
解决方案
更改您的代码如下:
SET XACT_ABORT ON
BEGIN TRY
BEGIN TRAN
INSERT INTO [FTR].[dbo].[Usr](fname, lname, phonea, addr)
(
SELECT p_code, y_code, y_name, r_coden
FROM [ADS].[Prep].[InfoEm]
)
--
-- other multiple insert statements
--
COMMIT TRAN
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK
END CATCH
推荐阅读
- jquery - jQueryMobile:响应式 SVG 文件中的链接不起作用
- javascript - 如何在可单击的 div 标签中放置文本超链接,以便在单击时仅触发超链接
- python-3.x - 如何为seaborn(python)线图设置x刻度
- reactjs - 用户可以更改 React/React Native 状态吗?
- django - 在 Scorched/Sunburnt/Solr 搜索中转义冒号
- css - 如何使ant Layout设计适合页面
- python - 在 PyAudio 模块中安装时出错
- python - 模块 'pynput.keyboard' 没有属性 'press'
- comments - 向行业公司的遗留应用程序/代码中的代码添加注释?
- python - 为什么框架不显示在 tkinter