Skulle behöva er hjälp med följande kod. Har jag tänkt rätt?
Tabeller:
lagerplatsBrochure
lagerplats
BEGIN
IF EXISTS(SELECT dbo.lagerplatsBrochure.fk_lpID FROM dbo.lagerplatsBrochure WHERE dbo.lagerplatsBrochure.fk_lpID = @lpid)
BEGIN
IF (@@ROWCOUNT = 2) -- OM Det kom tillbaka 2 rader vid Selecten ovan
BEGIN
DELETE FROM dbo.lagerplatsBrochure WHERE dbo.lagerplatsBrochure.fk_lpID = @lpid AND dbo.lagerplatsBrochure.fk_brSLank = @brid
UPDATE dbo.lagerplats SET dbo.lagerplats.sammansatt = '0' WHERE dbo.lagerplats.LPExpID = @lpid
END
ELSE
BEGIN
IF(@@ROWCOUNT > 2) -- OM Det kom tillbaka fler än 2 rader vid Selecten ovan
BEGIN
DELETE FROM dbo.lagerplatsBrochure WHERE dbo.lagerplatsBrochure.fk_lpID = @lpid AND dbo.lagerplatsBrochure.fk_brSLank = @brid
END
ELSE -- 1 rad tillbaka
BEGIN
IF(@@ROWCOUNT = 1)
BEGIN
DELETE FROM dbo.lagerplatsBrochure WHERE dbo.lagerplatsBrochure.fk_lpID = @lpid AND dbo.lagerplatsBrochure.fk_brSLank = @brid
END
END
END
END
END
Det jag vill är följande:
1 - Kolla ifall tabell lagerplatsBrochure har minst en lagerplats med ID = @lpid lagrad.
2 - Ifall den har det, och har 2 sådana ID (mha @@ROWCOUNT = 2). Ta bort lagerplatsen med @brid samt uppdatera tabell lagerplats.sammansatt = 0 där lagerplats.LPExpID = @lpid
3 - Annars, om det kom tillbaka fler än 2 rader (@@ROWCOUNT > 2). Ta enbart bort en rad i lagerplatsBrochure.
4 - Eller, om det kom tillbaka 1 rad (@@ROWCOUNT = 1). Ta enbart bort en rad i lagerplatsBrochure.
Stämmer det som jag tänkt skriva ovan? har jag gjort en tankevurpa ngnstans?
Du kan inte använda @@rowcount på det sättet. Den nollställs före varje statement. En if exists returnerar inga rader så @@rowcount är 0 efteråt.
declare @rows int
set @rows = (select count(*)
FROM dbo.lagerplatsBrochure
WHERE dbo.lagerplatsBrochure.fk_lpID = @lpid)
if @rows = 1 begin ... end
else if @rows = 2 begin ... end
else
Du kan inte använda @@rowcount på det sättet. Den nollställs före varje statement. En if exists returnerar inga rader så @@rowcount är 0 efteråt.
declare @rows int
set @rows = (select count(*)
FROM dbo.lagerplatsBrochure
WHERE dbo.lagerplatsBrochure.fk_lpID = @lpid)
if @rows = 1 begin ... end
else if @rows = 2 begin ... end
else
ah. Suvveränt! Tack för hjälpen LarsG. Ska testa med det du skrev. :)
Tackar!
EDIT
Verkar fugnera bra! Tackar!
En annan kort fråga. Kan man på ngt sätt "stega" igenom en exekvering av en SP i SQL server 2005? Ungefär som debuggen i VS2005... Finns det ngn sådan funktion?
261 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25