如果DDL语句失败,则整个事务将回滚到sql server

时间:2009-03-24 15:33:28

标签: sql vb.net

我有一系列DML和DDL(仅限Drop View)语句,我需要在VB.net应用程序的单个事务下执行。我使用commandObj,并保持最重要的是我保持beginTransaction语句。当Drop语句返回错误时,一切正常。如果Drop语句返回错误,则回滚整个事务。我不想要这个。我想继续,即使Drop没有保留Drop之前执行的其他DML语句。这有可能吗?

提前谢谢你 西

5 个答案:

答案 0 :(得分:1)

谢谢大家的答复..

实际上,在执行Drop View之前已经检查了视图是否存在。仅当另一个用户锁定时,才会出现丢弃视图问题。就像你在执行drop view之后我已经移动了所有DML事务一样,即使drop view语句失败(这将回滚所有先前的事务),也没有问题,因为这是第一个执行的语句。

答案 1 :(得分:0)

我认为DDL语句不是事务性的(即如果发生错误,则无法在当前语句之前回滚语句)。

查看错误发生的原因&将其修改为DROP VIEW

编辑:如果它可能是一个不存在的视图(不是已经创建或删除),您可以使用IF EXISTS(....)语法。

示例here

答案 2 :(得分:0)

然后在您的COMMIT和/或ROLLBACK语句之前或之后移动您的DDL。

答案 3 :(得分:0)

单独执行语句,并根据需要处理错误(回滚或不回滚)。

答案 4 :(得分:0)

您可以在sysobjects视图中运行select来检查视图是否存在,只有在它存在时才将其删除。

您还可以在存储过程中使用try ... catch。

与其他人一样,您也可以在交易前删除视图。

或许您可以使用临时表而不是视图,但这实际上取决于您的需求和需要完成的工作。