Обновление оператора в SQL Server 2005 - PullRequest
0 голосов
/ 19 января 2010

Рассмотрим следующий Dig. Предположим, что во всех трех таблицах есть столбец Is_Deleted , по умолчанию он установлен на 0 ... Я хочу обновить Is_Deleted = 1 поле Клиенты таблица, где CustId = 2 только тогда, когда строки, содержащие CustId = 2 и Is_Deleted = 1 в Orders и OrderItems Таблицы ... Я не хочу использовать Каскад вариант .. Любое предложение

alt text
(источник: microsoft.com )

Ответы [ 3 ]

1 голос
/ 19 января 2010

Самый простой способ - СУЩЕСТВУЕТ. Я предполагаю, что вы хотите проверить как 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)
1 голос
/ 19 января 2010

ОК звучит нормально ... Мы устанавливаем флаг удаления только тогда, когда все заказы и все позиции заказов, связанные с этим клиентом, удалены, или только если удален хотя бы 1 товар.

0 голосов
/ 20 января 2010

Вы можете использовать триггеры в таблице - Клиенты

Вы можете получить подробную информацию о триггерах:

С помощью Trigger вы можете проверить столбец Value of Updates и в зависимости от этого вы можете обновить данные разных таблиц.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...