Member 10192073 Ответов: 2

Как мы проверяем, что сумма счетов-фактур и квитанций равна в SQL


Привет, я использую SQL server 2008 и импортирую данные из excel, используя Имопрт и экспорт данных

есть две таблицы счета-фактуры

COLUMN_NAME	DATA_TYPE
Invoice_Id	varchar
ItemName	varchar
Quantity	bigint
Amount	money
Date_Time	datetime


а вторая таблица-это квитанция

COLUMN_NAME	DATA_TYPE
Receipt_Id	varchar
Invoice_Ref	varchar
Amount	money
Date_Time	datetime


и в таблице счетов-фактур Invoice_Id имеет первичный ключ, а в таблице поступлений Invoice_Ref имеет ссылки на внешний ключ из таблицы счетов-фактур.

теперь предположим, что INVOICE001 должен заплатить 20000 в таблице счетов-фактур, но он платит первую квитанцию 10000, а затем вторую квитанцию 10000 в таблице квитанций.

как мы можем проверить сумму 20000 = 10000+10000 с помощью SQL.
Значит, то, что мне нужно использовать, при создании таблицы квитанций мы можем поставить какое-либо ограничение для этого?
пожалуйста, помогите мне

Что я уже пробовал:

Я хочу попробовать во время импорта из excel в SQL server, как мы можем гарантировать, что сумма счетов-фактур и сумма таблицы квитанций сумма (квитанция 1 + квитанция 2) равна или может быть меньше, но не больше, потому что он может оплатить еще одну квитанцию.

2 Ответов

Рейтинг:
2

Peter Leow

Сделайте паузу и переосмыслите свой подход.
Вам действительно нужен столбец сумма в таблице счета-фактуры? Зачем хранить сумму счета-фактуры, если она может быть получена путем суммирования сумм квитанций в таблице квитанций динамически с помощью SQL, например

SELECT SUM(receipt.amount) FROM invoices JOIN receipt ON invoice_id=invoice_ref WHERE invoice_id=SOMEVALUE

Даже в электронных таблицах excel вы должны использовать формулу и условие, чтобы получить актуальную сумму счета-фактуры из соответствующих сумм поступлений.
Таким образом, нет необходимости беспокоиться о подсчете суммы счета-фактуры и соответствующих сумм квитанций.


Maciej Los

Хорошая мысль, пятерка!

Peter Leow

Спасибо, Мацей.

Suvendu Shekhar Giri

истинный. хороший момент, если только у OP нет для этого какой-то особой/странной логики.

Рейтинг:
12

Suvendu Shekhar Giri

Создайте вместо триггера для вставки что-то вроде следующего

CREATE TRIGGER MyTrigger ON dbo.RECEIPT
INSTEAD OF INSERT
AS
BEGIN
  DECLARE @InvoiceId	AS VARCHAR(100) --replace with actual size
  DECLARE @Amount AS MONEY
  SELECT @InvoiceId = I.Invoice_Ref,@Amount = I.Amount from INSERTED I;

  IF((SELECT Amount FROM INVOICES WHERE Invoice_Id=@InvoiceId)>= 
         (SELECT SUM(Amount) FROM RECEIPT WHERE Invoice_Ref=@InvoideId)+@Amount)
  BEGIN
      RAISERROR('Cannot insert due to amt validation',16,1);
  END
  ELSE
  BEGIN
      INSERT INTO RECEIPT (Invoice_Ref, Amount, Date_Time)
      VALUES (@InvoiceId, @Amount, GETDATE())
  END
END


Примечание: это всего лишь подход, вам нужно реализовать логику и изменения в соответствии с вашими требованиями. Кроме того, я не выполнил запрос в SSMS, поэтому не могу гарантировать наличие опечаток/синтаксических ошибок.

Надеюсь, это поможет. В случае каких-либо вопросов, пожалуйста, дайте мне знать :)


Maciej Los

5ед!

Suvendu Shekhar Giri

Спасибо Мацей :)

Member 10192073

пожалуйста, дайте мне только решение только для моего следующего вопроса, я новичок в технологии, но мой босс задал вопрос, который http://www.codeproject.com/Questions/1111134/How-we-sync-data-into-our-cloud-server-by-using-Cs