CREATE PROCEDURE spProdukter( Är du säker på att else-satsen kommer att höra till den inre if-satsen? Jag testade på SQL Server 2000, och den tolkar det så, men jag vet inte om att alla modeller och versioner gör det. Jag skulle ha använd begin och end på den yttre if-satsen också för att vara säker. Skapa två olika procedurer. Att ha två helt olika kodvägar i en procedur blir inte bra för återanvändning av exekveringsplaner. Och som Göran sa, TOP 100 PERCENT verkar inte göra någon nytta i frågorna, så den kan plockas bort ändå. Som ett annat alternativ kan du iofs köra så här:Else sats
Från huvud sidan skickas parametern u_id men inte up_id, up_id är ifall en användare på målsidan väljer ett val i dropdown menyn för att då bestämma underkategori.
Från huvudsidan till målsidan med u_id så presenteras inget alternativ, men tilldelar jag båda parametrarna så fungerar det, någon som har en bra lösning?
@u_id int, @up_id int)
AS
IF @u_id IS NOT NULL
IF @up_id IS NOT NULL
BEGIN
SELECT DISTINCT TOP 100 PERCENT p_id, p_namn, bild, p_pris, p_nyhet
FROM dbo.dbProdukt
WHERE (p_reserverad = 0) AND (u_id = @u_id) AND (up_id = @up_id)
ORDER BY p_nyhet DESC, p_id DESC
END
ELSE
BEGIN
SELECT DISTINCT TOP 100 PERCENT p_id, p_namn, bild, p_pris, p_nyhet
FROM dbo.dbProdukt
WHERE (p_reserverad = 0) AND (u_id = @u_id)
ORDER BY p_nyhet DESC, p_id DESC
END
GO
Sv: Else sats
Jag har aldrig använt "distinct" och "top 100 percent" tillsammans, så jag vet inte vad det har för effekt. Konstruktionen "top 100 percent" borde ju inte ha någon effekt alls? Behöver du använda distinct? Kort sagt: Plocka bort allting onödigt som kan störa, och testa igen.Sv: Else sats
Sv:Else sats
<code>
CREATE PROCEDURE dbo.spProdukter
(
@u_id int
, @up_id int = NULL
)
AS
SELECT DISTINCT p_id, p_namn, bild, p_pris, p_nyhet
FROM dbo.dbProdukt
WHERE p_reserverad = 0
AND u_id = @u_id
AND up_id = COALESCE(@up_id, up_id)
ORDER BY p_nyhet DESC, p_id DESC
</code>