【问题标题】:How to execute two delete statments如何执行两个删除语句
【发布时间】:2011-07-15 21:31:09
【问题描述】:
    ALTER PROCEDURE dbo.ModeratorSpamDeleteThread

  @ThreadsID INT

AS

  DELETE Threads
  WHERE ThreadsID=@ThreadsID

我有这个..但它告诉我我不能删除表,因为它通过外键连接到另一个表..

所以我也需要这样做:

  @ThreadsID INT

AS

  DELETE Comments
  WHERE ThreadsID=@ThreadsID

问题是我如何将两个 stamtent 合二为一?

【问题讨论】:

  • 查看 ON DELETE CASCADE 的外键。

标签: asp.net sql stored-procedures


【解决方案1】:

您首先在评论中执行删除,然后在线程中执行删除。

ALTER PROCEDURE dbo.ModeratorSpamDeleteThread
  @ThreadsID INT
AS

DELETE Comments
WHERE ThreadsID=@ThreadsID 

DELETE Threads
WHERE ThreadsID=@ThreadsID

【讨论】:

  • 我一定会添加回滚功能,以防第二条语句失败。
  • @Avada Kedavra - 这是个好主意。我通常在中间层/客户端开始交易。
  • 回滚..我不是 sql 从业者..但我可以看到该方法一直有效...除非..两位版主同时删除线程...我对吗?
  • @Matrix001 - 如果第二次删除由于某种原因失败,回滚可能会派上用场。如果您在同一个事务中执行两个删除语句,您可以在删除失败时进行回滚,并且您可以从评论中取回已删除的行。 Threads 中的删除失败的一个原因可能是您有其他表与您忘记删除的 Threads 具有 FK 关系。看看这个sommarskog.se/error_handling_2005.html 和这个答案stackoverflow.com/questions/2073737/…
【解决方案2】:

你可以这样做:

ALTER PROCEDURE dbo.ModeratorSpamDeleteThread
@ThreadsID INT
AS

  DELETE Comments
  WHERE ThreadsID=@ThreadsID

  DELETE Threads
  WHERE ThreadsID=@ThreadsID

GO

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 2018-08-26
    • 2020-03-19
    • 2019-02-20
    • 1970-01-01
    相关资源
    最近更新 更多