2014-07-20 18 views
0

我正在使用SQL服务器创建代理作业。在我的数据库中有2个表格。 第一个表的列有: Idproduct,数 第二表中的列有: Idproduct,启动(DATATIME),持续时间(时间)如何根据时间创建代理作业

我需要时递增的产品的领域数目其(开始+持续时间)< = getdate()然后我需要删除这条记录。 我该怎么办?

Create table product(
    Idproduct int primary key, 
    Number int default 0) 
Create table production(
    Idproduct int primary key, 
    Start datetime not null, 
    Times time not null) 

回答

0

一种方法是使用DELETE语句的OUTPUT子句将生成的产品插入到表变量中。然后使用表变量来增加计数。下面的示例使用SQL 2012及更高版本的功能,但如果需要,可以为早期版本改进错误处理。

SET XACT_ABORT ON; 

DECLARE @ProducedProducts TABLE(
    Idproduct int 
    ); 

BEGIN TRY 

    BEGIN TRAN; 

    --delete produced products 
    DELETE FROM dbo.production 
    OUTPUT deleted.Idproduct INTO @ProducedProducts 
    WHERE 
     DATEADD(millisecond, DATEDIFF(millisecond, '', Times), Start) <= GETDATE(); 

    --increment produced products count 
    UPDATE dbo.product 
    SET Number += 1 
    WHERE Idproduct IN(
     SELECT pp.Idproduct 
     FROM @ProducedProducts AS pp 
     ); 

    COMMIT; 

END TRY 
BEGIN CATCH 

    THROW; 

END CATCH; 
+0

我还可以选择需要更新的列,动态地从第二个表中的字段中获取列名? – Deca

+0

这是可行的,但需要动态SQL,并可能跳过一些额外的箍筋。我认为动态列的要求与此问题明显不同,因此建议您发布一个新问题,详细说明您希望完成的内容。 –