Hej! Vad exakt vill du göra? Det är inga problem att köra 2 Where-villkor. Jo visst men det var lite krångligare än så ;) Njae, riktigt så enkelt var det inte ;) Det framgår inte riktigt vilken typ av lösning du vill ha. Använder du en Stored Procedure? Eller snickrar du ihop SQL-satsen i t ex VB eller annat programspråk? Använder en SP och det är i den jag vill ställa if-satsen. Om du gör execute i en sp förlorar du den fördelen med sp's att de förkompileras. Nu börjar det likna nått som liknar det jag söker mer ;) Är mycket medveten om hur ful lösning det har varit att köra med EXEC(@sql) men detta verkar som sagt mycket bättre...IF och WHERE
Jag har en SQL sats där jag i vissa fall vill köra två WHERE vilkor, antingen var för sig, båda två eller ingen av dem.
Har testat lite med både IF och CASE men får det inte att inte riktigt att funka. Någon som kan hjälpa mig lite på traven?
//KalleSv: IF och WHERE
Det är bara att använda AND: Select * From tabell Where Villkor1 And Villkor2.
Är det det du menar?
/JörgenSv: IF och WHERE
Jag ska lista upp ett antal objekt på sidan. Varje objekt kan antingen vara raderat, dolt eller helt vanligt.
Jag har två selectlistor där man för raderad och dold ska kunna välja typ "Alla", "Endast raderade" och "Endast ej raderade" sen samma sak för det dolda alternativet.
När jag sedan ska skriva sql satsen så ska ju where villkoret endast ställas om inte "alla".
Jag skulle vilja ha all sql kod i en SP så därför är det ju lite svårt att bygga upp frågan från asp koden.
Kanske lite dåligt förklarat. Annars kan jag nog slänga ihopp ett lite bättre exempel...
//KalleSv: IF och WHERE
Jag har ett antal olika parametrar där man ska kunna välja mellan de tre alternativen "Spelar ingen roll", "Ja", "Nej". Detta kan t.ex. vara raderade eller synlig.
När jag sedan ska köra sql frågan och jag och användaren har valt att raderade poster (markerad med en deleted flagga i tabellen så de finns ju kvar men visas inte på siten) ska listas ska wheresatsen finnas med men om första alternativet ("spelar ingen roll") är vald ska ju inget where villkor ställas.
Idag har jag två olika val som detta problem uppstår med men det kan i framtiden bli fler.
Hänger du med mer på vad mitt problem är nu?
//KalleSv: IF och WHERE
I t ex VB så kan du göra så här :
<code>
Dim StrSql As String
Dim strWhere As String
If IncludeDeleted=0 Then ' Don't care
strWhere=""
Else If IncludeDeleted=1 Then ' Endast deleted
strWhere=" Deleted=1"
Else
strWhere=" Deleted=0"
End if
strSQL="SELECT * FROM [Tabellnamn]"
If strWhere<>"" Then strSQL=strSQL & " WHERE " & strWhere
</code>
Om du jobbar med en Stored Procedure så kan det se ut så här :
<code>
CREATE PROCEDURE GetItems
@IncludeDeleted int
AS
DECLARE strWhere varchar(1024)
IF @IncludeDeleted=0
BEGIN
strWhere=''
END
ELSE IF @IncludeDeleted
BEGIN
strWhere=' WHERE Deleted=1 '
END
ELSE
BEGIN
strWhere=' WHERE Deleted=0 '
END
DECLARE strSQL varchar(8000)
SET strSQL='SELECT * FROM [TableName] ' + strWhere
EXEC (StrSQL)
GO
</code>
Det är säkert en massa småfel i koden, men ungefär så kan du göra. Det finns andra lösningar, t ex att skicka in strWhere som en parameter till StoredProceduren.Sv: IF och WHERE
Att man kunde använda exec för att köra selects osv var faktistk mer än vad jag viste... har tittat på sp_execsql eller vad den nu heter tidigare men inte riktigt fått det att funka som jag vill.
Ska titt anärmare på om det går bättr med att använda exec på måndag. Tackar för hjälpen så länge!Sv: IF och WHERE
Om du vill inaktivera ett where-villkor kan du göra så här oxå:
select stuff
from table1
where ( stuff = @stuff and status=@status )
OR ( 1 = @boolNoFilter )
@boolNoFilter är en bit som du har som input.
Om du sätter den till 1 returneras alla poster oavsett de andra villkoren.
Eftersom 1 alltid är lika med 1 :)
/OlaSv: IF och WHERE
problemet är ju att ibland ska stuff vara med och ibland status och ibland båda. Men det borde ju gå att lösa med lite paranteser tycker jag, får sätta mig och testa lite och hoppas på det bästa ;)