---
title: "SQL kod: Har jag tänkt rätt?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/161391-sql-kod-har-jag-tänkt-rätt"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "freddyk"
published: "2007-06-12T07:03:42.000Z"
updated: "2007-06-12T07:27:31.000Z"
replies: 2
views: 484
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/161391-sql-kod-har-jag-tänkt-rätt"
---

# SQL kod: Har jag tänkt rätt?

## #1 — freddyk, 2007-06-12T07:03Z

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?

SQL Server 2005

Tackar på förhand för inputs!

Permalänk: https://www.webforum.nu/p/161391

## #2 — LarsG, 2007-06-12T07:20Z

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
```

Permalänk: https://www.webforum.nu/p/1989584

## #3 — freddyk, 2007-06-12T07:27Z

> **LarsG skrev:**
>
> 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?

Permalänk: https://www.webforum.nu/p/1989588

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/161391-sql-kod-har-jag-tänkt-rätt
