2017-07-05 2 views
0

In Store Prozedur I-Code ist Platzierung alsFall Anweisung Fehler wie falsche Syntax bekommt

SELECT * 
FROM [Order] O 
INNER JOIN Users U ON O.UserId=U.UserId 
INNER JOIN State S ON S.StateId=O.Billing_StateId 
INNER JOIN OrderStatus OS ON O.OrderStatusId=OS.OrderStatusId 
WHERE (CASE WHEN ISNULL(@Name,'')='' THEN 0=0 ELSE O.Billing_FirstName LIKE '%' + @Name + '%' OR O.Billing_LastName LIKE'%' + @Name + '%' END) 
AND (CASE WHEN ISNULL(@Email,'')='' THEN 0=0 ELSE O.Billing_Email LIKE '%' + @Email + '%' END) 

aber es ist in der Nähe als falsche Syntax gibt Fehler =

Ich weiß nicht, was ich bei der Platzierung falsch tue DANN 0 = 0?

Wenn es falsch ist, was sollte ich dort drüben geschrieben und ist meine Abfrage in Ordnung?

Wenn @Name Parameter nicht da ist, dann wird es nicht erste Bedingung überprüfen und für den nächsten Zustand überprüfen wird

+0

Es gibt ein paar Fehler hier. Ich denke, wir können Ihnen besser helfen, wenn Sie erklären, was Sie tun möchten. Ich meine, was willst du mit dieser Frage erreichen? – TheEsnSiavashi

+0

Ich implementiere Suche auf der Liste von Elementen, so dass ich nur Abfrage auf Basis von Name, E-Mail, Staat, Stadt mache. Wenn der Name nicht da ist, sollte er nach anderen 3 Items suchen. –

Antwort

3

du versuchen.

WHERE (@Name IS NULL OR(O.Billing_FirstName LIKE '%' + @Name + '%' OR O.Billing_LastName LIKE'%' + @Name + '%')) 
AND (@Email IS NULL OR (O.Billing_Email LIKE '%' + @Email + '%')) 
+0

Wie wäre es mit Startdatum und Enddatum sollte ich in diesem Zustand hinzufügen? Ich meine, wenn null dann keine codition sonst die –

+0

AND (@StartDate IST NULL ODER (O.OrderDate> = @StartDate)) UND (@EndDate IST NULL ODER (O.OrderDate <= @EndDate)) –

+0

wenn Parameter von @StartDate ist als Datum definiert, dann funktioniert dieser obige Code? –

-1

Ihre CASE Aussage ist falsch

falls Bedingung Sie neue Parameter definieren müssen, die ersetzen die Bedingung.

sehen diese (ich weiß nicht, ob seine Arbeit oder nicht)

WHERE 
(CASE 
    WHEN ISNULL(@Name,'')='' THEN 0 
    WHEN O.Billing_FirstName LIKE '%' + @Name + '%' OR O.Billing_LastName LIKE'%' + @Name + '%' THEN 1 
END as cond1) = 0 (*or 1, i dont know what you need) 
AND ........ 
+0

Oder Bedingung ist nicht möglich in einer case Anweisung wie O.Billing_FirstName LIKE '%' + Name + '%' ODER O.Billing_LastName LIKE '%' + Name + '% "Diese Bedingung ist nicht möglich? –

+0

seine posible ich denke, sehe mein update –

0

Versuchen Sie folgendes:

SELECT * 
FROM [Order] O 
INNER JOIN Users U ON O.UserId=U.UserId 
INNER JOIN State S ON S.StateId=O.Billing_StateId 
INNER JOIN OrderStatus OS ON O.OrderStatusId=OS.OrderStatusId 
WHERE 
(NULLIF(@Name,'') IS NULL OR O.Billing_FirstName LIKE '%' + @Name + '%' OR O.Billing_LastName LIKE'%' + @Name + '%') 
AND (NULLIF(@Email,'') IS NULL OR O.Billing_Email LIKE '%' + @Email + '%') 
+0

0 = 0 wird das boolesche Ergebnis zurückgeben und ich glaube nicht, dass Sie das Gleichheitszeichen (=) nach dem THEN Schlüsselwort verwenden können, da es nur eine einzige Anweisung ohne Zuordnung oder Vergleich etc. geben sollte. – ViKiNG