如何根据时间创建代理作业

时间:2014-07-20 11:54:59

标签: sql-server sql-agent-job

我正在使用SQL服务器创建代理作业。在我的数据库中有2个表。 第一个表中的列是: Idproduct,数量 第二个表中的列是: Idproduct,start(数据时间),持续时间(time)

我需要在产品(起始+持续时间)< = 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)

1 个答案:

答案 0 :(得分:0)

一种方法是使用DELETE语句的OUTPUT子句将生成的产品插入表变量中。然后使用table变量递增计数。下面的示例使用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;