Hej! Har en sql-fråga som ser ut ungefär så här:
SELECT *
FROM tabell
WHERE (id IN (10,20,25))
Nu vill jag skicka in värdet "10,20,25" dynamiskt. Alltså nåt i den här stilen: WHERE (id IN (@variabel))
Hur gör man det?
9 svar · 568 visningar · startad av inspiro
Hej! Har en sql-fråga som ser ut ungefär så här:
SELECT *
FROM tabell
WHERE (id IN (10,20,25))
Nu vill jag skicka in värdet "10,20,25" dynamiskt. Alltså nåt i den här stilen: WHERE (id IN (@variabel))
Hur gör man det?
Det var ju visst bara att skicka in en int, trodde inte det gick eftersom det var decimaler i den tänkte jag... :)
Hm, var för snabb där... får det inte att funka ändå.
Alltså problemet är hur jag ska få in värdet i databasen! För om jag kör frågan i sql-server så funkar det om jag har en @var int och skickar in värdet "10,20,25" men om jag från koden skickar in samma värde så får jag fel. Har provat att skicka in en sträng, en int, arrayer men fård et inte att fungera ändå. Hur gör jag för att få in värdet i min sql-sats?
Så här har jag gjkort nu, skriver jag med fasta värden så funkar det:
SELECT *
FROM tabell
WHERE (CAST(id AS NVARCHAR(10)) IN (135,136))
Men skriver jag så här får jag inte ut nåt:
@ObjectsID nvarchar(200)
(CAST(id AS NVARCHAR(10)) IN ([b]@ObjectsID[/b]))
Vad är fel?
Det fungerade, kanon! :) Du har inte lust att förklara varför?
Det är vanlig stränkonkatenering, så det är som att du skapar SQL-frågan av olika delsträngar i vilket språk som helst.
mvh
Hm, får det ändå inte att fungera. När jag kör frågan i sql-server fungerar det bra men exekverar jag från koden så får jag följande meddelande:
Line 3: Incorrect syntax near ')'.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Data.SqlClient.SqlException: Line 3: Incorrect syntax near ')'.
Det fungerade, kanon! Du har inte lust att förklara varför?
Det är en dynamisk sql-sats, vilket även betyder att den aldrig kommer att kompileras = exekveras långsamare.
Finns det någon bättre lösning då? Jag har alltså ett antal id i en kommaseparerad sträng och jag vill få ut alla poster i en tabell som motsvarar dessa id:n.