2017-10-17 6 views
0

同じカテゴリのすべての商品の価格を変更するストアドプロシージャを作成する必要があります。私は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) –

答えて

0

あなたはbegindatumとenddatumを得たが、この

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; 

のようなものについては、多分あなたは挿入する方法更新の代わりに新しいレコード

+0

私の場合、新しい行を挿入することは確かに優れています。あなたのソリューションをありがとう、私はそれが合うかどうかを確認します。 –

関連する問題