Hallo Zusammen
ich habe folgendes Problem in einer Stored Procedure auf einem MS SQL Server 2000.
Die SP soll das Ergebnis einer SELECT-Abfrage auf eine Tabelle mit Namen Orders zurückgeben. In der Tabelle gibt ein Integerfeld mit Namen STATUS, das die Werte 1 bis 6 annehmen kann.
Als Parameter soll der SP ein möglicher Wert übergeben werden, auf den das Feld Status gefiltert werden soll.
So funzt es auch ganz gut:
CREATE PROCEDURE spOrdersItemsMerged<br>
@Status int<br>
AS<br>
<br>
SELECT FROM dbo.orders WHERE dbo.orders.status = @Status<br>
<br>
GO
Klappt soweit. Jetzt gibt es aber auch die Möglichkeit, dass der Benutzer keinen Filterwert übergeben kann, d.h. er will die Sätze mit allen Stati 1-6 sehen (dazu übergebe ich den Wert 0)
Ich hab mir schon dir Finger gebrochen mit CASE, komme aber zu keiner syntaktisch richtigen Lösung, z.b. so
CREATE PROCEDURE spOrdersItemsMerged<br>
@Status int<br>
AS<br>
<br>
SELECT FROM dbo.orders <br>
WHERE dbo.Orders.OrderState IN<br>
CASE<br>
WHEN @Status = 0 THEN (1,2,3,4,5,6)<br>
WHEN @Status > 0 THEN (@Status)<br>
END<br>
<br>
GO<br>
Läßt sich gar nicht speichern, weil in der Nähe von "," in der ersten CASE-Anweisung ein Fehler ist.
Kann mir irgendjemand für dieses Problem eine gültige Lösung präsentieren. Ich will übrigens keine Lösung mit IF @Status = 0 THEN ELSE und jeweils einem SELECT Statement in THEN und ELSE Zweig sondern möchte gerne mit einem SELECT Statement auskommen.
Kann mit da jemand helfen ?
Gruß
Jan
ich habe folgendes Problem in einer Stored Procedure auf einem MS SQL Server 2000.
Die SP soll das Ergebnis einer SELECT-Abfrage auf eine Tabelle mit Namen Orders zurückgeben. In der Tabelle gibt ein Integerfeld mit Namen STATUS, das die Werte 1 bis 6 annehmen kann.
Als Parameter soll der SP ein möglicher Wert übergeben werden, auf den das Feld Status gefiltert werden soll.
So funzt es auch ganz gut:
CREATE PROCEDURE spOrdersItemsMerged<br>
@Status int<br>
AS<br>
<br>
SELECT FROM dbo.orders WHERE dbo.orders.status = @Status<br>
<br>
GO
Klappt soweit. Jetzt gibt es aber auch die Möglichkeit, dass der Benutzer keinen Filterwert übergeben kann, d.h. er will die Sätze mit allen Stati 1-6 sehen (dazu übergebe ich den Wert 0)
Ich hab mir schon dir Finger gebrochen mit CASE, komme aber zu keiner syntaktisch richtigen Lösung, z.b. so
CREATE PROCEDURE spOrdersItemsMerged<br>
@Status int<br>
AS<br>
<br>
SELECT FROM dbo.orders <br>
WHERE dbo.Orders.OrderState IN<br>
CASE<br>
WHEN @Status = 0 THEN (1,2,3,4,5,6)<br>
WHEN @Status > 0 THEN (@Status)<br>
END<br>
<br>
GO<br>
Läßt sich gar nicht speichern, weil in der Nähe von "," in der ersten CASE-Anweisung ein Fehler ist.
Kann mir irgendjemand für dieses Problem eine gültige Lösung präsentieren. Ich will übrigens keine Lösung mit IF @Status = 0 THEN ELSE und jeweils einem SELECT Statement in THEN und ELSE Zweig sondern möchte gerne mit einem SELECT Statement auskommen.
Kann mit da jemand helfen ?
Gruß
Jan
Comment