Условный триггер ПОСЛЕ ОБНОВЛЕНИЯ - PullRequest
0 голосов
/ 19 апреля 2019

Я пробую свои силы в написании триггеров и хочу, чтобы триггер AFTER UPDATE был таким, что:

  1. Только при обновлении всех записей " TypeA "(через пользовательский интерфейс) до " Выдано ", -> для каждого уникального OrderID:

    Статус Master1 (для того же OrderID) должен быть обновлен до ' TypeA Issued ».

    Аналогично, когда все TypeB выданы в Details1, Master1.Status должен иметь значение « TypeB Issued » и т. Д. Для других типов

    Поскольку количество строк для каждого типа(в Details1) может отличаться, я использую значение счетчика Not Issued в качестве условия, так как триггер должен срабатывать только тогда, когда счетчик становится 0

  2. Master2.Status должен бытьобновлено до TypeA Выдается только для всех изменений состояния TypeA (на Выдано) в таблице Details1.

Я пробовал этот триггер, но его обновление Master1, даже если значение Status в Details1 установлено наНе выдается.Кроме того, где и как я должен включить обновление Master2 или я должен написать другой триггер специально для обновления Master2

CREATE TRIGGER Master1_TypeAIssued_StatusUpdate
ON Details1
AFTER UPDATE
AS
BEGIN
    IF (SELECT COUNT(Details1.Status)
          FROM Details1
          INNER JOIN Master1 ON Details1.OrderID = dbo.Master1.OrderID
          WHERE Details1.Status = 'Not Issued' AND
          Details1.Type = 'TypeA') = 0
      BEGIN
          RETURN
      END
  UPDATE Master1 SET Master1.Status = 'TypeA Issued'
END


OrderID     Type        Status
W1          TypeA       Not Issued
W1          TypeA       Not Issued
W1          TypeA       Not Issued
W1          TypeB       Not Issued
W1          TypeB       Not Issued
W1          TypeC       Not Issued
W2          TypeA       Not Issued
W2          TypeA       Not Issued
W2          TypeB       Not Issued

Master1 Table
OrderID     Status
W1          Pending
W2          Pending

Master2 Table
OrderID     Status
W1          Pending
W2          Pending

1 Ответ

0 голосов
/ 19 апреля 2019

попробуйте изменить ваше состояние ниже:

IF (SELECT COUNT(Details1.Status)
          FROM Details1
          INNER JOIN Master1 ON Details1.OrderID = dbo.Master1.OrderID
          WHERE Details1.Status = 'Not Issued' AND
          Details1.Type = 'TypeA' 
           AND Details1.OrderId IN (Select OrderId from Inserted)) > 0
      BEGIN
          RETURN
      END

Это потому, что вы не должны обновлять, когда есть записи, которые имеют статус "не проблемы"

...