Hej!
Har en sp som hämtar alla kursdeltagare. Typ
SELECT * FROM KURSDELTAGARE
Nu vill jag utnyttja samma procedur för att hämta en enskild kursdeltagare.
Den resulterande SQL:en ska alltså se ut så här:
SELECT * FROM KURSDELTAGARE WHERE DELTAGARID=@DELTAGARID
Jag har tänkt att skicka in 0 som deltagarid då jag vill ha alla kursdeltagare och ett relevant kursdeltagarid då jag vill ha en enskild deltagare.
Hur kan jag hänga på where-villkoret på enklaste sätt då deltagarid<>0? DVS hur ska t-sql:en se ut?
BrimbaMedlem sedan dec. 19995 875 inlägg Nu pratar jag sql-server (vilken databas använder du?)
Ett sätt är att bygga upp din fråga dynamiskt i spn och exekvera den med sp_executesql.
Ett annat sätt är att använda case, exempelvis
SELECT
*
FROM
KURSDELTAGARE
WHERE
DELTAGARID = CASE @DELTAGARID WHEN 0 THEN DELTAGARID ELSE @DELTAGARID END
ett annat sätt är att skapa två nya sp:s som du kör beroende på vad som skickas in, exempelvis
IF (@DELTAGARID > 0)
EXEC deltagaremedid @DELTAGARID
ELSE
EXEC deltaridutanid
ett tredje sätt är att ha två frågor direkt i spn, exempelvis
IF (@DELTAGARID > 0)
SELECT * FROM KURSDELTAGARE WHERE DELTAGARID=@DELTAGARID
ELSE
SELECT * FROM KURSDELTAGARE
Jag använder SQL Server.
Den första lösningen verkar passa mig bäst. Tack. Men om personid är null så fungerar inte jämförelsen och posten returneras inte.
Varför inte skapa en ny procedur som hanterar alla deltagare? I alla fall, jag tror jag såg denna struktur på where-sats ute här på forumet.
SELECT * FROM KURSDELTAGARE
WHERE DELTAGARID = @DELTAGARID OR 0 = @DELTAGARID