2016-06-02 4 views
0

bekam ich ein Problem in Stored Procedure:SQL Server: Wie kann ich das Ergebnis der Tabelle auswählen, wenn die Bedingung FALSE ist?

SELECT * FROM TESTTABLE 
WHERE COUNT = CASE WHEN (@count = -1) THEN --SELECT ALL RESULT OF TESTTABLE-- 
ELSE @count END 

Wenn param @count nicht gleich -1 ist, möchte ich diese Abfrage das gleiche mit ist:

SELECT * FROM TESTTABLE 

ich mit

versucht
SELECT * FROM TESTTABLE 
WHERE COUNT = CASE WHEN (@count <> -1) THEN @count END 

Aber es ist nicht wahr.

+2

WHERE @Count = -1 oder [Count] = @ Count', aber es wird wahrscheinlich Sie etwas schlechte Leistung. In diesem Fall sollten Sie dynamisches SQL verwenden. – Lamak

+0

Wahr, ich würde hier ein Objekt verwenden. –

+1

Warum teilen Sie sie nicht einfach mit einer IF-Anweisung? 'IF (@count = -1) BEGIN SELECT * FROM ... ENDE ELSE BEGIN SELECT * FROM Tabelle WHERE COUNT = @ count' –

Antwort

2

Da es sich um eine gespeicherte Prozedur ist, sollte die beste Leistung kommen aus 2 verschiedenen Anfragen:

if @count <> -1 
    SELECT * FROM TESTTABLE 
else 
    SELECT * FROM TESTTABLE WHERE [email protected] 
0

Da Sie eine gespeicherte Prozedur verwenden Sie eine if-Anweisung verwenden können. Etwas wie:

IF @Count <> -1 
BEGIN 
    Select * From TestTable 
END 
ELSE 
BEGIN 
    Select * From TestTable Where 1=0 
END 
Verwandte Themen