---
title: "två select"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/92077-två-select"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Dino"
published: "2003-12-07T19:36:46.000Z"
updated: "2003-12-08T18:44:30.000Z"
replies: 13
views: 387
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/92077-två-select"
---

# två select

## #1 — Dino, 2003-12-07T19:36Z

Ok, har då en [tempurär tabell](http://www.webforum.nu/showthread.php?s=&threadid=90025&forumid=53) och behöver hjälp med hur två Select på den skall utformas.

1\. En Select som tar ut vart femte art_id.

2\. En Select som väljer TOP 5 från och med ett speifikt art_id. Har då testat med.

```
SELECT TOP 5 * FROM @tbl WHERE art_id >= @index
```

Men det funkar inte riktigt. @tbl kan ju ha genomlidigt en hel del sortering som kan ge detta utseende.

```
art_id
----------
32
1
54
43
278
266
2
23
61
70
43
67
177
132
```

 
Och då blir problemet att om @index är 54 då tas endast "54, 278, 266, 61, 70" ut istället för "54, 43, 278, 266, 2". Finns det någon enkel väg runt detta?

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

## #2 — LarsG, 2003-12-07T19:43Z

Det ser ut som om du skulle behöva ha ett sekvensnummer i din tabellvariabel.

Om du lägger till en kolumn (seqno) med identity så kan du ställa

```
select top 5 * 
  from @tbl
  where seqno > 
      (select seqno 
          from @tbl 
       where art_id > @index)
order by seqno
```

top utan order by betyder egentligen att du kan få vad som helst eftersom du inte kan förutsätta någon viss ordning i tabellen.

2)

```
select * 
  from @tbl
 where seqno % 5 = 0
```

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

## #3 — Dino, 2003-12-07T20:08Z

Har lite problem med att skapa en kolumn. Testade med två nedan varianter men får fel, så lite hjälp där oxå kanske.

```
DECLARE @tbl table
(
   a_id int, 
   a_pName varchar(30),
   a_company varchar(30),
   a_seqno int IDENTITY(1,1)
)
SET IDENTITY_INSERT @tbl ON

INSERT INTO @tbl 
   SELECT 
          a_id,
          a_pName,
          a_company
   FROM Customer
   WHERE a_c_id = @c_id
```

```
SELECT 
          a_id,
          a_pName,
          a_company,
          IDENTITY(int, 1,1) AS a_seqno
   INTO @tbl
   FROM Customer
   WHERE a_c_id = @c_id
```

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

## #4 — LarsG, 2003-12-08T09:11Z

Vad får du för del då?

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

## #5 — Dino, 2003-12-08T12:09Z

På första får jag "Incorrect syntax near '@tbl'." Vilket motsvarar raden med SET IDENTITY_INSERT @tbl ON.

På andra får jag samma fel fast vid INTO @tbl.

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

## #6 — LarsG, 2003-12-08T12:29Z

Såvitt jag förstår så kan man inte sätta identity_insert för tabellvariabler. 

Tycker inte att du behöver sätta det heller i detta fall

```
INSERT INTO @tbl (a_id,a_pName, a_company)
   SELECT 
          a_id,
          a_pName,
          a_company
   FROM Customer
   WHERE a_c_id = @c_id
```

select into används för att skapa en ny tabell så det fungerar inte att använda en tabellvariabel där.

Det verkar finnas lite begränsningar för hur tabellvariabler kan användas och jag ser ingen direkt förklaring till varför dessa begränsningar finns.

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

## #7 — Dino, 2003-12-08T12:39Z

Om jag inte sätter det så får jag "An explicit value for the identity column in table '@tbl' can only be specified when a column list is used and IDENTITY_INSERT is ON." vilket ju motsäger sig själv.

Hur kommer jag runt detta?

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

## #8 — LarsG, 2003-12-08T12:50Z

Hmm, du kanske kan använda funktionen identity när du gör fyller din tabellvariabel

```
INSERT INTO @tbl 
   SELECT 
          a_id,
          a_pName,
          a_company,
          identity(1,1)
   FROM Customer
   WHERE a_c_id = @c_id
```

Detta är inget som jag har använt själv så jag spånar lite.

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

## #9 — Dino, 2003-12-08T12:58Z

Nä, funktionen funkar inte eftersom jag inte kan använda INTO på @tbl.

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

## #10 — LarsG, 2003-12-08T16:17Z

Jaha, kan du ha en egen räknare då

```
declare @counter int
set @counter = 0

INSERT INTO @tbl 
   SELECT 
          a_id,
          a_pName,
          a_company,
         @counter = @counter + 1
   FROM Customer
   WHERE a_c_id = @c_id
```

eller du kanske måste återgå till en temptabell?

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

## #11 — Dino, 2003-12-08T17:41Z

Får detta fel på räknaren. "A SELECT statement that assigns a value to a variable must not be combined with data-retrieval operations."

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

## #12 — Dino, 2003-12-08T18:21Z

Ok, har fått lite hjälp av en Aaron Bertrand. Detta löser det hela.

```
DECLARE @tbl table
(
   a_id int,
   a_pName varchar(30),
   a_company varchar(30),
   a_seqno int IDENTITY(1,1)
)

INSERT INTO @tbl(a_id, a_pName, a_company)
   SELECT
          a_id,
          a_pName,
          a_company
   FROM Customer
   WHERE a_c_id = @c_id
```

Nu kan jag gå tillbaka till de lösningar du skrev i ditt första inlägg. Tack för hjälpen LarsG. :)

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

## #13 — LarsG, 2003-12-08T18:29Z

Det var ju samma som jag föreslog tidigare (13:29) tycker jag.
Vad är skillnaden?

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

## #14 — Dino, 2003-12-08T18:44Z

Skillnaden är att jag troligen drappats av total ordblindhet runt 13:29 snåret och uppfattade inte "(a_id,a_pName, a_company)" i ditt inlägg. \*Slår mig själv i huvudet med en ca 40 cm hög lampa \*

 :r

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/92077-två-select
