Проверьте по двум таблицам, чтобы в данных не было аномалий - PullRequest
0 голосов
/ 23 октября 2019

Есть две таблицы;один Delivery_order как DO, а другой weight3 как w3 DO закрывается, когда его статус = «Получен», но с другой стороны, пользователи также вводят данные для каждого DO в таблицу w3, поэтому я хочу построитьлогика, что если DO status = 'Received', то когда пользователь вводит данные в W3, он получит ошибку, что DO закрыт, и ключ между этими таблицами - Contract_Number.

Может кто-нибудь, пожалуйста, сообщите мне логику или напишите мнезапрос.

declare @latest date
declare @ContractNumber nvarchar(200)

select @latest=Max(DO.Time_stamp), @ContractNumber=DO.Contract_Number from Delivery_Order DO where DO_Status='Received' group by DO.Contract_Number

select distinct w3.ContractNo as contract_number,'After closing the DO data is entered!' AS Remarks
from weight3 w3 where 
 @latest<(select distinct MAX(w3.second_time) from weight3 w3 where w3.ContractNo=@ContractNumber) and w3.ContractNo=@ContractNumber

Ответы [ 2 ]

0 голосов
/ 23 октября 2019

Вы можете создать instead of trigger и проверить там свое состояние:

CREATE TRIGGER CheckStatusOfDelivery 
ON weight3
INSTEAD OF INSERT AS
BEGIN
IF EXISTS(SELECT 1 FROM Delivery_order
          WHERE status = 'Received'
          AND contract_number IN (SELECT contract_number FROM inserted))
   BEGIN
      RAISERROR ('Status is received!', 10, 1)
      ROLLBACK TRANSACTION
   END
   ELSE
   BEGIN
      INSERT INTO weight3
      SELECT * FROM inserted
   END
END
0 голосов
/ 23 октября 2019

Насколько я понимаю, если в таблице Weight есть введенный элемент, он выдаст сообщение об ошибке.

select case when coalesce(t1.contract_number, '') != '' then 'After closing the DO data is entered!' else 'success' end as remarks
 from 
    (select max(second_time) stime, contractno from weight3 w group by contractno) as t1
 left join 
    (select max(time_stamp) stime, contract_number 
    from delivery_order where status='Received' 
    group by contract_number) t2 on t2.contract_number = t1.ContractNo and t2.stime <  t1.stime 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...