2014-02-06 4 views
1

У меня есть 2 таблицы Aprovizionari (что означает «Принадлежности книг») и Facturi (что означает Invoices). Таблицы имеют следующую структуру:декремент столбца из таблицы при уменьшении столбца из другой таблицы

create table Aprovizionari 
(
    ID_Aprovizionare int  identity(1,1) primary key, 
    CodCarte   char(3) foreign key references Carti(CodCarte), 
    CodLibrarie  char(3) foreign key references Librarii(CodLibrarie), 
    DataAprovizionare date default getdate(), 
    Cantitate   int  default 1 
-- ^^^^^^^ it should decrement when Cantitate from Facturi increment 
) 

create table Facturi 
( 
    CodFactura char(3) primary key, 
    CodClient char(4) foreign key references Clienti(CodClient), 
    CodCarte char(3) foreign key references Carti(CodCarte), 
    Cantitate int  default 1, 
-- ^^^^^^^ value from here must be decrement in Aprovizionari.Cantitate 
    CodLibrarie char(3) foreign key references Librarii(CodLibrarie), 
) 

Aprovizionari (Поставка) сохраняет Cantitate (количество) каждой книги в наличии.

Каждая запись в Facturi (счета-фактуры) хранит покупку количества Cantitate конкретной книги.

Книги могут быть идентифицированы CodCarte в обеих таблицах.

Каждый раз, когда счет-фактура записывается в Facturi, количество книг, на которые должно быть выставлено счета, должно быть вычтено из количества книг, доступных в Aprovizionari. Как это можно достичь?

+0

Я попытался уточнить ваш вопрос, если вы чувствуете, что я изменил значение на все, что вы можете нажать «отредактированная x минута назад» выше и «откат» к предыдущей версии. – OGHaza

+0

Если вам нужна помощь в этом другом вопросе, отправьте его как новый вопрос, и я посмотрю, когда я получу какое-то время, но кто-то, возможно, ответит первым – OGHaza

+0

Я разместил его :) Спасибо! – user3279198

ответ

0

Если вы не вставляете Facturi в слишком много разных мест, достаточно просто выполнить обновление на Aprovizionari после того, как вы сделаете INSERT, например.

INSERT INTO Facturi (CodCarte, Cantitate, ...) 
VALUES (101, 2); 

UPDATE Aprovizionari 
SET Cantitate = Cantitate - 2 
WHERE CodCarte = 101; 

В противном случае вы могли бы сделать это с помощью триггера по линиям:

CREATE TRIGGER Facturi_OnInsert 
    ON Facturi 
    AFTER INSERT 
AS 
BEGIN 
    UPDATE a 
    SET a.Cantitate = a.Cantitate - i.Cantitate 
    FROM Aprovizionari a 
    INNER JOIN INSERTED i ON i.CodCarte = a.CodCarte 
END 
+0

Триггер работает хорошо! Но есть другое правило, о котором я забыл упомянуть. Количество выставленных книг должно быть вычтено из количества книги, доступной в Aprovizionari, не только каждый раз, когда счет-фактура записывается в Facturi, но когда CodLibrarie из Aprovizionari = CodLibrarie из Facturi тоже. Итак, я только что добавил к строке INNER JOIN INSERTED i ON i.CodCarte = a.CodCarte и a.CodLibrarie = i.CodLibrarie. Спасибо огромное! – user3279198

+0

Нет проблем, я подумал, что может быть так, но рад, что вы это решили. Если ваша проблема полностью решена, оцените ее, если вы примете ответ. – OGHaza

+0

Я принимаю ответ !. Я должен что-то сделать, чтобы закрыть тему или некоторые? – user3279198

0

Просто обновить колонку из кантитата Aprovizionari в соответствии с количествами, купленными, например, из таблицы Facturi.

Или вы можете применить триггер на таблице Facturi при создании любого нового счета, т. Е. Любая новая запись, вставленная в эту таблицу, уменьшает количество из таблицы Aprovizionari.

Смежные вопросы