从一个表中减少一个列,同时从另一个表中减少一个列

时间:2014-02-06 11:59:45

标签: sql-server sql-server-2008-r2

我有2张表Aprovizionari(表示书籍供应)和Facturi(表示发票)。表格具有以下结构:

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中可用的图书数量中减去开具发票的图书数量。如何实现这一目标?

2 个答案:

答案 0 :(得分:0)

根据购买的数量,即根据Facturi表更新Aprovizionari表的Cantitate列。

或者,您可以在生成任何新发票时在Facturi表上应用触发器,即插入此表中的任何新条目都会减少Aprovizionari表中的数量。

答案 1 :(得分: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