我有一系列DML和DDL(仅限Drop View)语句,我需要在VB.net应用程序的单个事务下执行。我使用commandObj,并保持最重要的是我保持beginTransaction语句。当Drop语句返回错误时,一切正常。如果Drop语句返回错误,则回滚整个事务。我不想要这个。我想继续,即使Drop没有保留Drop之前执行的其他DML语句。这有可能吗?
提前谢谢你 西答案 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。
与其他人一样,您也可以在交易前删除视图。
或许您可以使用临时表而不是视图,但这实际上取决于您的需求和需要完成的工作。