webForumDet fria alternativet

Invariabel i "IN()"

8 svar · 281 visningar · startad av Jesper T

Jesper TMedlem sedan nov. 20017 144 inlägg
#1

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)
LarsGMedlem sedan dec. 200012 464 inlägg
#2

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

Jesper TMedlem sedan nov. 20017 144 inlägg
#3

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

LarsGMedlem sedan dec. 200012 464 inlägg
#4

Varför det?

Jesper TMedlem sedan nov. 20017 144 inlägg
#5

Det var bara en fråga. ;)

LarsGMedlem sedan dec. 200012 464 inlägg
#6

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

BrimbaMedlem sedan dec. 19995 875 inlägg
#7

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!

tohaMedlem sedan dec. 1999707 inlägg
#8

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]
Jesper TMedlem sedan nov. 20017 144 inlägg
#9

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

129 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)