我正在使用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)
答案 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;