I have this stored procedure:
Create Procedure spVerhoogPrijzen1
@artikelcategorie varchar(128),
@ingangsdatum date
as
begin transaction
update p
set prijs = prijs * 1.1
from artikelprijs p
join artikel a on a.artikelnr = p.artikelnr
join artikelcategorie c on c.catcode = a.catcode
where c.catomschrijving like @artikelcategorie
and p.begindatum >= @ingangsdatum
if @@ERROR <> 0
begin
rollback
Raiserror('Je hebt iets fouts ingevuld', 16, 1)
end
commit
But when I run it, it takes forever to create the procedure. I stopped it after 15 minutes.
I'm using SQL Server 2014 Management Studio.
Artikel contains:
401 Kaviaar lux
402 Ganzenlever lux
403 Vruchtenyoghurt Aardbei zuv
404 Volle Yoghurt zuv
405 Magere Kwark zuv
Artikelcategorie contains:
bio biologische artikelen
lux luxe artikelen van de traitteur
zuv zuivelartikelen
Artikelprijs contains:
401 21.50 2012-01-01 2099-12-31
402 38.95 2012-01-01 2012-12-31
402 39.95 2013-01-01 2013-10-31
402 37.00 2013-11-01 2099-12-31
403 16.25 2012-01-01 2013-07-31
Can you please try the following procedure
ALTER PROCEDURE USP_VerhoogPrijzen1
@artikelcategorie1 varchar(128),
@ingangsdatum date
AS
BEGIN
CREATE TABLE #artikelprijs (artikelnr INT,prijs DECIMAL(18,2),begindatum DATETIME)
CREATE TABLE #artikel (artikelnr INT,name VARCHAR(100),catcode VARCHAR(10))
CREATE TABLE #artikelcategorie (catcode VARCHAR(10),catomschrijving varchar(128))
INSERT INTO #artikelprijs VALUES
(401,21.50,'2012-01-01'),
(402,38.95,'2012-01-01'),
(402,39.95,'2013-01-01'),
(401,37.00,'2013-11-01'),
(403,16.25,'2012-01-01')
INSERT INTO #artikel VALUES
(401,'Kaviaar','lux'),
(402,'Ganzenlever','lux'),
(403,'Vruchtenyoghurt Aardbei','zuv'),
(404,'Volle Yoghurt','zuv'),
(405,'Magere Kwark','zuv')
INSERT INTO #artikelcategorie VALUES
('bio','biologische artikelen'),
('lux','luxe artikelen van de traitteur'),
('zuv','zuivelartikelen')
UPDATE P
SET P.prijs = P.prijs * 1.1
FROM #artikelprijs P
INNER JOIN #artikel A on A.artikelnr = p.artikelnr
INNER JOIN #artikelcategorie C on C.catcode = A.catcode
WHERE c.catomschrijving like @artikelcategorie1 AND P.begindatum >= @ingangsdatum
SELECT P.* FROM #artikelprijs P
INNER JOIN #artikel A on A.artikelnr = p.artikelnr
INNER JOIN #artikelcategorie C on C.catcode = A.catcode
WHERE c.catomschrijving like @artikelcategorie1 AND P.begindatum >= @ingangsdatum
IF @@ERROR <> 0
BEGIN
Raiserror('Je hebt iets fouts ingevuld', 16, 1)
END
SELECT * FROM #artikelprijs
DROP TABLE #artikelprijs
DROP TABLE #artikel
DROP TABLE #artikelcategorie
END
--EXEC USP_VerhoogPrijzen1 'zuivelartikelen', '2012-01-01'
According to your join condition, one row is affected which catcode is 403 and value is 16.25. After update this value has changed to 17.88. Please check and Thanks.