有没有办法测试 DELETE 是否会因约束而失败?

Jay*_*van 11 sql-server-2005 sql-server-2008 sql-server

我希望能够预测 DELETE 是否会违反约束,而无需实际执行删除。

我有什么选择来做这件事?有没有一种简单的方法可以对 DELETE 进行“试运行”?

Aar*_*and 26

如果您的目标是仅在所有删除都成功时处理所有删除,为什么不使用 TRY/CATCH:

BEGIN TRANSACTION;
BEGIN TRY
  DELETE #1;
  DELETE #2;
  DELETE #3;
  COMMIT TRANSACTION;
END TRY
BEGIN CATCH
  ROLLBACK TRANSACTION;
END CATCH
Run Code Online (Sandbox Code Playgroud)

如果目标是允许所有成功的删除成功,即使一个或多个失败,那么您可以使用单独的 TRY/CATCH,例如

BEGIN TRY
  DELETE #1;
END TRY
BEGIN CATCH
  PRINT 1;
END CATCH

BEGIN TRY
  DELETE #2;
END TRY
BEGIN CATCH
  PRINT 1;
END CATCH
Run Code Online (Sandbox Code Playgroud)


GaT*_*mas 6

一种选择是开始事务,运行删除,然后始终回滚:

begin tran

delete Table1 where col1 = 1

-- Test whether it is there
select * from Table1 where col1 = 1

rollback tran

-- Confirm that it is still there
select * from Table1 where col1 = 1
Run Code Online (Sandbox Code Playgroud)

  • @GaTechThomas Aaron 贡献很大,所以他有时很简短,但我确信他的意图不是咄咄逼人。我在 [The Heap](http://chat.stackexchange.com/rooms/179/the-heap) 中讨论了这个问题,我也很感激有机会与您一起讨论。 (4认同)