---
title: "Invariabel i \"IN()\""
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/122012-invariabel-i-in"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Jesper T"
published: "2005-02-08T15:58:46.000Z"
updated: "2005-02-09T08:16:07.000Z"
replies: 8
views: 303
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/122012-invariabel-i-in"
---

# Invariabel i "IN()"

## #1 — Jesper T, 2005-02-08T15:58Z

Går inte detta att lösa på något annat sätt än dynamisk sql om s.id är av datatypen int?

```
...
WHERE s.id IN(@sid)
```

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

## #2 — LarsG, 2005-02-08T16:03Z

Ja, skriv en funktion som delar upp sid, lagrar värdena i en tabellvariabel och returnerar tabellvariabeln som functionsresultat.

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

## #3 — Jesper T, 2005-02-08T16:11Z

Ooops, det låter nästan som att det skulle vara mer belastande för databasen än att göra den dynamisk?

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

## #4 — LarsG, 2005-02-08T16:17Z

Varför det?

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

## #5 — Jesper T, 2005-02-08T16:25Z

Det var bara en fråga. ;)

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

## #6 — LarsG, 2005-02-08T16:49Z

Som alltid när man funderar på vad som är bäst ur prestandasynpunkt: Testa.

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

## #7 — Brimba, 2005-02-08T17:27Z

Många gånger när jag har gjort detta har det snabbaste varit att ta emot indatan och ha en funktion som returnerar en tabell av den inskickade datan (som LarsG föreslår). Tabellen joinar du på sedan mot lämpligt fält istället för att använda IN(), det är ofta snabbare.

Om du har många sökvillkor så är en dynamiskt uppbyggd fråga oftast snabbare, istället för att göra massa "case when", eller vad du nu kan tänkas behöva att göra. Men det absolut viktigaste är att du kan utnyttja dina index på ett bra sätt. Om du i slutändan använder dig av dynamiskt uppbyggd sql så skall du använda sp_executesql istället för exec. Det är inte bara säkrare utan även snabbare.

Lycka till!

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

## #8 — toha, 2005-02-09T00:12Z

Jag brukar använda mig av en user function som gör om en kommaseparerad varchar till en tabell.

<http://www.webforum.nu/showthread.php?s=&threadid=119334>

Då skulle du exempelvis göra följande inner join istället för att använda IN().

```
varchar @myValues varchar(400)
set @myValues = '1,2,3,4,5,6,7,89,10,11,12,13,14,15,16,17,18,19,20'

SELECT
 User.*
FROM
 User
 INNER JOIN
 dbo.parseString(@myValues) userValues
 ON
 userValues.IDs = User.[ID]
```

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

## #9 — Jesper T, 2005-02-09T08:16Z

Tack åter igen toha (å Brimba å LarsG).
Det där funkade ju som smort. :)

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/122012-invariabel-i-in
