使用存储过程为同一类别中的所有产品更改价格

使用存储过程为同一类别中的所有产品更改价格

问题描述:

我需要创建一个存储过程,以更改具有相同类别的所有项目的价格。我只能使用2个输入参数; @artikelcategorie(类别)和@ingangsdatum(价格更改将开始日期)。使用存储过程为同一类别中的所有产品更改价格

如果您输入'lux'(类别)和'10-19-2017'(日期),例如它应该将该类别的所有商品的价格上调10%。

我完全停留在这一点上。

数据库看起来像这样;

enter image description here

目前我有这个作为SQL代码

IF EXISTS (SELECT * FROM sys.objects WHERE type ='P' AND name = 'spVerhoogPrijzen') 
DROP PROCEDURE spVerhoogPrijzen 
    GO 

CREATE PROCEDURE spVerhoogPrijzen 
(
    @artikelcategorie varchar(3), 
    @ingangsdatum date 
) 
AS 
BEGIN 

    BEGIN TRANSACTION 

    UPDATE artikelprijs SET einddatum = DATEADD(DAY, -1, @ingangsdatum) 
    WHERE catcode = @artikelcategorie AND einddatum > @ingangsdatum; 

    IF @@ERROR <> 0 
    BEGIN 
     ROLLBACK 
     RAISERROR ('Error', 16, 1) 
     RETURN 
    END 

    --INSERT INTO artikelprijs VALUES (?, ?, @ingangsdatum, '2099-12-31') 

    COMMIT 
    END 
GO 
+0

第一部分将无法正常工作。 'artikelprijs'没有列'catcode'。 –

+0

@HamletHakobyan是否有可能在存储过程中加入表格呢? –

+0

是的,[UPDATE(Transact-SQL)](https://docs.microsoft.com/en-us/sql/t-sql/queries/update-transact-sql) –

如何像这样

UPDATE ap SET 
ap.einddatum = DATEADD(DAY, -1, @ingangsdatum), 
ap.prijs = ap.prijs*1.1 
FROM artikelprijs AP 
JOIN artikel a on a.artikelnr = ap.artikelnr 
    WHERE a.catcode = @artikelcategorie AND einddatum > @ingangsdatum; 

但是你有一个begindatum和enddatum,也许你会插入一个新记录而不是更新

+0

对我来说插入一个新行确实更好。感谢您的解决方案,我会检查我是否可以适应。 –