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.d34c6d5a