2014-07-20 28 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,並可能跳過一些額外的箍筋。我認爲動態列的要求與此問題明顯不同,因此建議您發佈一個新問題,詳細說明您希望完成的內容。 –