我可以在事务中运行动态sql并使用EXEC进行回滚:
exec('SELECT * FROM TableA; SELECT * FROM TableB;');
将其放入事务中,并在exec语句后使用@@ error进行回滚。
例如。代码
BEGIN TRANSACTION
exec('SELECT * FROM TableA; SELECT * FROM TableB;');
IF @@ERROR != 0
BEGIN
ROLLBACK TRANSACTION
RETURN
END
ELSE
COMMIT TRANSACTION
如果存在n条动态sql语句并且错误发生在n / 2中,则将回滚前1到((n / 2)-1)条语句
有关第一个答案的问题
@@ Error最有可能不会拾取错误,这意味着它可能不会拾取错误,这意味着事务可能会提交?达不到目的
SQL Server 2005+中的TRY / CATCH是,我正在使用SQL Server 2005,但在尝试以下操作之前没有使用Try Catch
BEGIN TRANSACTION
BEGIN TRY
exec('SELECT * FROM TableA; SELECT * FROM TableB;');
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
END CATCH
或者我在网上看了更多的例子
BEGIN TRY --Start the Try Block..
BEGIN TRANSACTION -- Start the transaction..
exec('SELECT * FROM TableA; SELECT * FROM TableB;');
COMMIT TRAN -- Transaction Success!
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRAN --RollBack in case of Error
RAISERROR(ERROR_MESSAGE(), ERROR_SEVERITY(), 1)
END CATCH
是的。TXN属于当前会话/连接,并且动态SQL使用相同的上下文。
但是,@@ ERROR最有可能不会收到该错误:必须在违规语句之后立即检查状态。我会使用TRY / CATCH,假设使用SQL Server 2005+
编辑:TRY / CATCH应该工作正常。
我正在使用Apache FOP通过XML和XSL-FO生成PDF。我在生成的PDF中有一个单元格,如果内容溢出,我需要能够滚动它。XSL-FO有一个溢出="滚动"功能,但根据我对该主题的研究,Apache FOP似乎不支持此选项。 例如,这是一个大型CAD公司使用的PDF中的可滚动区域,我需要复制: 有没有办法在Apache FOP中启用此功能?是否可以在源代码中启用它(我还没有找到这样做的方法)
我在使用PIVOT SQL脚本时遇到了一个“小”问题。我目前的解决方案基于类似的问题 动态枢轴 . 我已经写好了PIVOT脚本,基本上没问题。然而,我的情况是这样的,脚本输出类似这样的内容,而不是将唯一的条目放在单行上 而我所寻找的结果应该是这样的 这是脚本 我将不胜感激一些可以帮助我解决这个问题的指示。我在这里做了一个小提琴,由于某种奇怪的原因,它没有输出任何东西,但生成架构的所有代码都在那里
我需要在查询中输入动态json路径,可以吗? 我的尝试: 调用此函数时,我会收到以下错误消息: 味精203,16级,状态2,第2行 Name“SELECT JSON_VALUE”({“glossary”):{“title”:“example glossary”,“GlossDiv”:{“title”:“S”,“GlossList”:{“GlossEntry”:{“ID”:“SGML”,“SortA
问题内容: 说我有一个带有这样的渲染的组件: 其中jewelStyle = 如何使背景颜色动态并随机分配?我试过了 但这会使View的所有实例具有相同的颜色,我希望每个实例都是唯一的。 有小费吗? 问题答案: 我通常按照以下方式进行操作: … 每次渲染View时,都会使用与之关联的随机颜色实例化一个新样式对象。当然,这意味着每次重新渲染组件时颜色都会改变,这也许不是您想要的。相反,您可以执行以
在对特定变更集执行update命令后,我将liquibase与oracle数据库一起使用,该变更集的日志插入到DATABASECHANGELOG表中,但是如果我执行rollbackCount命令回滚该变更集,插入的日志将被删除,并且我无法找到已执行并再次回滚的变更的历史记录。
问题内容: 我需要在声明式管道中启动一组动态测试。为了更好的可视化目的,我想为每个测试创建一个阶段。有办法吗? 创建一个我知道的阶段的唯一方法是: 我已经看到了这个示例,但是我没有使用声明性语法。 问题答案: 使用声明性语法比声明性语法更具灵活性的脚本化语法,即使声明性文档和建议性更多。 例如,可以循环创建阶段: