Avatar billede mortenbock Nybegynder
27. maj 2007 - 15:30 Der er 6 kommentarer og
2 løsninger

Select where værdi er i et array

Jeg har brug for at lave en select sætning med en masse OR forekomster a'la:

select * where id = 1 or id = 2 or id = 3

Det går jeg fint indtil videre, men hvad gøre jeg hvis id nu bare skal være én ud af 100 værdier? Det virker lidt kluntet at skrive 100 OR parametre?

Findes der noget a'la:

select * where id contained in [1,2,3,4,5,6,7,8,9,10,11]

Håber der er nogen der har et forslag? :-)
Avatar billede ij Nybegynder
27. maj 2007 - 15:32 #1
jeps
select * where id in (1,2,3,4,5,6,7,8,9,10,11)
Avatar billede ij Nybegynder
27. maj 2007 - 15:33 #2
ups
SELECT * FROM tabelnavn WHERE id IN (1,2,3,4,5,6,7,8,9,10,11)
Avatar billede ij Nybegynder
27. maj 2007 - 15:33 #3
skulle have været et svar :-)
Avatar billede mortenbock Nybegynder
27. maj 2007 - 15:49 #4
super, tak for hjælpen.

Ved du evt. også om man kan indsætte det array via .net parameters?
Avatar billede jens_klinting Nybegynder
27. maj 2007 - 16:52 #5
Du kan ikke umiddelbart overføre et array som .NET parameter, men det kan gdot lade sig gøre. Hvis du omformer dit array til et byte-array (hvilket burde være rimeligt simpelt i dit eksempel), så kan du overføre dit byte-array som en binary-datatype-parameter til din sql. Du skal så på sql-serveren have omformet dit byte-array ved hjælp af en user-defined-function til en table, som du derefter kan joine med i din sql. Lidt bøvlet, men absolut muligt.

Et problem ved at indsætte værdierne i en WHERE id IN (...) er, at der er begrænsninger på længden af sql-statements. Du løber ikke i den samme grænse ved at overføre dine data i en binary-parameter.

Der findes på codeproject.com et eksempel på en (ikke synderlig god) implementation af parameteroverførsel af data i byte-arrays + udpakning til tabeller på sql-serveren. Du kan finde mere her: http://www.codeproject.com/cs/database/PassingArraysIntoSPs.asp

Mvh.
Jens
Avatar billede mortenbock Nybegynder
27. maj 2007 - 17:19 #6
Tak for svarene begge to.

Har givet ij lidt flere point fordi det trods alt var det oprindelige spørgsmål :-)

Jens> Jeg tror jeg ender med en lidt anden løsning, som jeg fandt ud af var mulig:

select * from mytable where id in (select id from othertable)

Mht. længden og antallet af parametre så ryger jeg ikke ekstremt højt op, så det går nok.
Avatar billede dr_chaos Nybegynder
29. maj 2007 - 11:06 #7
"Har givet ij lidt flere point fordi det trods alt var det oprindelige spørgsmål :-)"
Tror du mangler at accepterer svarene :)
Avatar billede mortenbock Nybegynder
29. maj 2007 - 12:18 #8
såådan :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester