Ist es möglich, eine IF- Klausel innerhalb einer WHERE- Klausel in MS SQL zu verwenden?
Beispiel:
WHERE
IF IsNumeric(@OrderNumber) = 1
OrderNumber = @OrderNumber
ELSE
OrderNumber LIKE '%' + @OrderNumber + '%'
sql
sql-server
tsql
Bryan Roth
quelle
quelle
CASE
In den meisten Fällen ist die Verwendung die geeignete Lösung. In meinem Fall wollte ich den Vergleichsoperator ändern und habe daher den nächsten Ansatz verwendet.Sie sollten dies ohne IF oder CASE tun können
Abhängig von der SQL-Variante müssen Sie möglicherweise die Casts auf der Bestellnummer auf INT oder VARCHAR anpassen, je nachdem, ob implizite Casts unterstützt werden.
Dies ist eine sehr häufige Technik in einer WHERE-Klausel. Wenn Sie eine "IF" -Logik in der WHERE-Klausel anwenden möchten, müssen Sie lediglich die zusätzliche Bedingung mit einem booleschen UND zu dem Abschnitt hinzufügen, in dem sie angewendet werden muss.
quelle
Sie brauchen überhaupt keine IF-Anweisung.
quelle
where (@AdmUserId is null or CurrentOrder.CustomerAdmUserId = @AdmUserId)
Oder nur filtern, wenn IncludeDeleted = 0:where (@IncludeDeleted = 1 or ItemObject.DeletedFlag = 0)
In SQL gibt es keine gute Möglichkeit, dies zu tun. Einige Ansätze, die ich gesehen habe:
1) Verwenden Sie CASE in Kombination mit booleschen Operatoren:
2) Verwenden Sie IFs außerhalb von SELECT
3) Verfassen Sie Ihre SQL-Anweisung mit einer langen Zeichenfolge unter bestimmten Bedingungen und verwenden Sie dann EXEC
Der dritte Ansatz ist abscheulich, aber es ist fast der einzige Gedanke, der funktioniert, wenn Sie eine Reihe von variablen Bedingungen wie diese haben.
quelle
IF...ELSE...
conditionals in booleanAND
‚s undOR
‘ s wie in @ njr101 Antwort oben. Der Nachteil dieses Ansatzes ist, dass es schwierig sein kann, wenn Sie viele habenIF
oder wenn viele verschachtelt sindVerwenden Sie eine CASE- Anweisung anstelle von IF.
quelle
Sie möchten die CASE-Anweisung
quelle
Ich denke, wo ... wie / = ... Fall ... dann ... mit Booleschen Werten arbeiten kann. Ich benutze T-SQL.
Szenario: Angenommen, Sie möchten die Hobbys von Person-30 erhalten, wenn bool falsch ist, und die Hobbys von Person-42, wenn bool wahr ist. (Laut einigen machen Hobby-Lookups über 90% der Geschäftsberechnungszyklen aus, zahlen Sie also genau.)
quelle
quelle
IF P THEN Q ELSE R
<=>
( ( NOT P ) OR Q ) AND ( P OR R )
quelle
In diesem Fall funktioniert der Zustand ordnungsgemäß.
quelle
Im folgenden Beispiel wird eine Abfrage als Teil des Booleschen Ausdrucks ausgeführt und anschließend basierend auf dem Ergebnis des Booleschen Ausdrucks geringfügig andere Anweisungsblöcke ausgeführt. Jeder Anweisungsblock beginnt mit BEGIN und endet mit END.
Verwenden verschachtelter IF ... ELSE-Anweisungen Das folgende Beispiel zeigt, wie eine IF ... ELSE-Anweisung in einer anderen verschachtelt werden kann. Setzen Sie die Variable @Number auf 5, 50 und 500, um jede Anweisung zu testen.
quelle
In SQL Server hatte ich das gleiche Problem, dass ich eine and-Anweisung nur verwenden wollte, wenn der Parameter false ist, und bei true musste ich beide Werte true und false anzeigen, damit ich sie auf diese Weise verwendete
quelle
Sehen Sie, ob dies hilft.
quelle
quelle