【问题标题】:Update statement in sql server 2005sql server 2005 中的更新语句
【发布时间】:2010-01-19 12:21:34
【问题描述】:

考虑下面的Dig,假设三个表都有一列Is_Deleted,默认设置为0...我要更新Is_Deleted =1 Customers 表的字段,其中 CustId=2 仅当包含 CustId=2Is_Deleted=1 的行时OrdersOrderItems 中 表格...我不想使用 Cascade 选项.. 任何建议


(来源:microsoft.com

【问题讨论】:

    标签: sql sql-server-2005 sql-update


    【解决方案1】:

    最简单的方法是存在。我假设您想同时检查 Orders 和 OrderItems。这也意味着您只过滤一次 CustID。

    UPDATE
       C
    SET
       IsDeleted = 1
    FROM
       Customers C
    WHERE
       C.CustID = 2
       AND
       EXISTS (SELECT *
            FROM
                Orders O
            WHERE
                O.CustID = C.CustID AND O.IsDeleted = 1)
       AND
       EXISTS (SELECT *
            FROM
                Orders O
                JOIN
                OrderItems OI ON O.OrderID = OI.OrderID
            WHERE
                O.CustID = C.CustID AND OI.IsDeleted = 1)
    

    【讨论】:

    • @gbn 如果 orderitems 表中的某些行对于 C.CustID = 2 具有 Is_Deleted=0 会发生什么
    【解决方案2】:

    好的,听起来不错... 我们是否仅在删除所有订单和与该客户关联的所有订单商品时设置已删除标志,或者仅在至少删除 1 件商品时设置。

    【讨论】:

    • @Anthonyv ya 我会在删除所有订单以及与该客户关联的所有订单项时设置已删除标志
    【解决方案3】:

    您可以在表上使用触发器 - 客户

    您可以获取有关触发器的详细信息:

    使用触发器,您可以检查更新列的值,并根据它更新不同表的数据。

    【讨论】:

      猜你喜欢
      • 2016-06-10
      • 1970-01-01
      • 1970-01-01
      • 2011-05-05
      • 1970-01-01
      • 2011-01-03
      • 2011-08-28
      • 2021-12-03
      • 1970-01-01
      相关资源
      最近更新 更多