根据不同的列计算列,根据表中的不同列计算列中的列

时间:2014-02-07 11:04:56

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

我有桌子:

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 
)
create table Returnari
(
 CodRet char(3) primary key,
 CodCarte char(3) foreign key references Carti(CodCarte),
 CodLibrarie char(3) foreign key references Librarii(CodLibrarie),
 CodEditura char(4) foreign key references Edituri(CodEditura),
 DataRet date,
 Cantitate int
)

我有一个触发器,当我从另一个表Facturi(发票)添加Cantitate时,从Aprovizionari(Supply)减少列Cantitate(Quantity)。

在Returnari(退货书籍)我应该:

DataRet date,--this should be =DataAprovizionare+3 mounths
Cantitate int--this should be=the remaining Cantitate(Quantity) from Aprovizionari at date=DataAprovizionare+3 mounts 

1 个答案:

答案 0 :(得分:0)

为此,您需要每天检查3个月前的Aprovizionari条记录。当您找到一个INSERT Returnari记录时。

为此,您必须创建一个存储过程,在执行时将创建Returnari记录,然后安排SQL Server代理作业每天执行该过程。

存储过程看起来像:

CREATE PROCEDURE YourDailyProc ( @Date DATE )
AS
    INSERT INTO Returnari (CodCarte, CodLibrarie, DataRet, Cantitate)
    SELECT CodCarte, CobLibrarie, CAST(@Date AS DATE), Cantitate
    FROM Aprovizionari 
    WHERE DataAprovizionare = CAST(DATEADD(MONTH, -3, @Date) AS DATE)
GO

目前尚不清楚你会在哪里得到CodEditura,但可能你只需要加入另一张桌子。

现在你需要一份工作来每天执行EXEC YourDailyProc @Date=CURRENT_TIMESTAMP。这个答案看起来像是你需要做的所有信息 - how to schedule a job for sql query to run daily?