---
title: "@@ROWCOUNT - Transact-SQL"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/168552-rowcount-transact-sql"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "aasah"
published: "2008-01-29T14:49:55.000Z"
updated: "2008-01-29T17:08:00.000Z"
replies: 2
views: 600
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/168552-rowcount-transact-sql"
---

# @@ROWCOUNT - Transact-SQL

## #1 — aasah, 2008-01-29T14:49Z

Har följande lilla skript: 

```
DECLARE @rows int
SELECT 1, 5 
SELECT @@ROWCOUNT AS Immidiately 
	SET @rows = @@ROWCOUNT 
SELECT @rows AS First

if @@ROWCOUNT > 0
BEGIN
	SELECT @@ROWCOUNT AS Inside 
	SET @rows = @@ROWCOUNT 
END
ELSE SET @rows = 6
SELECT @rows AS Outside
```

Den skriver ut 

> Immidiately - 1
> First - 1
> 
> **Inside - 0**   \<--------- ?????
> Outside - 1

Någon som kan förklara hur eländet kan vara 0 inne i en if-satsdel som man bara hamnar i om den är \> noll???   :q 

Vad är det egentligen som händer här?

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

## #2 — Gein, 2008-01-29T15:01Z

Du kan bara hämta värdet ur @@ROWCOUNT en gång.
Testa detta:

```
SELECT 1
PRINT @@ROWCOUNT
PRINT @@ROWCOUNT
```

Varje gång du kör en SELECT-fråga så genereras ett nytt värde för @@ROWCOUNT, även de gånger när du kör SELECT för att hämta ut värdet ur @@ROWCOUNT. Därför ska du alltid spara undan värdet i @@ROWCOUNT till en variabel om du behöver dess värde flera gånger.

För att försöka beskriva din kod:

```
DECLARE @rows int
SELECT 1, 5 
SELECT @@ROWCOUNT AS Immidiately [B][I]rowcount är här 1 eftersom föregående rad genererade en rad.[/I][/B]	
SET @rows = @@ROWCOUNT [B][I]@rows sätts till 1 eftersom föregående rad (OBS! Alltså SELECT @@ROWCOUNT...-raden) genererade en rad[/I][/B]
SELECT @rows AS First

if @@ROWCOUNT > 0 [B][I]Ja, @@rowcount är större än 0 eftersom SELECT @rows ... genererade en rad.[/I][/B]
BEGIN
	SELECT @@ROWCOUNT AS Inside [B][I]Här är @@rowcount 0 eftersom vi inte har hämtat någon resultatmängd sen vi senaste hämtade (och därmed också tömde) @@rowcount [/I] [/B] 
	SET @rows = @@ROWCOUNT [I][B]@rows sätts till 1 eftersom raden ovanför genererade en resultatmängd innehållande 1 rad.[/B][/I]
END
ELSE SET @rows = 6
SELECT @rows AS Outside
```

Det jag tror du snurrar bort dig på är att varje gång du hämtar värdet ur @@ROWCOUNT så töms samma variabel.

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

## #3 — aasah, 2008-01-29T17:08Z

Tusen tack för ett mycket klargörande och bra svar, **Gein**! :birp

För övrigt var din hypotes riktig...

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/168552-rowcount-transact-sql
