Ich versuche, einen Berichtsparameter an a zu übergebengespeicherte Prozedur (@Time), die festlegt, welche Kategoriewerte in meinem Datensatz über die WHERE-Klausel zurückgegeben werden, und die Syntax nicht kennt, um dies korrekt zu bewerkstelligen vorher, aber nicht, wenn eine WHERE-Klausel IN ausgeführt werden muss.
DECLARE @Time AS NVARCHAR
SET @Time = "REG" --possible values of "REG" and "OT"
SELECT
f.[Category] AS [Category]
FROM foo f
WHERE
@Time =
CASE @Time
WHEN "REG" THEN f.[Category] IN (A, B, C, D)
WHEN "OT" THEN f.[Category] IN (E, F, G)
END
Antworten:
0 für die Antwort № 1Wenn Sie eine Zeichenvariable deklarieren, sollten Sie immer eine Länge angeben. Also deklarieren Sie @Time als ein Zeichen. Ich denke du willst 3 Zeichen.
Wenn Sie zweitens eine Variable nvarchar () deklarieren, weisen Sie ihr ein nvarchar () zu. Die Syntax lautet N "Reg" und nicht "Reg".
Drittens, was ist in der IN-Liste? Wollen Sie, dass dies Konstanten oder Spalten in den Daten sind?
Und schließlich möchten Sie für die WHERE-Klausel Folgendes:
WHERE (CASE WHEN @Time ="REG" and f.[Category] IN (A, B, C, D) then "true"
WHEN @Time ="OT" THEN f.[Category] IN (E, F, G) then "true"
else "false"
end) = "true"
2 für die Antwort № 2
Sie können verwenden OR
das zu ersetzen CASE
mit einigen Abfrageeinschränkungen wie folgt:
DECLARE @Time AS NVARCHAR(3)
SET @Time = "REG" --possible values of "OT" and "REG"
SELECT
f.[Category] AS [Category]
FROM foo f
WHERE (@Time = "REG" and f.[Category] IN (A, B, C, D))
OR (@Time = "OT" and f.[Category] IN (E, F, G))
END
1 für die Antwort № 3
SELECT f.[Category] AS [Category]
FROM foo f
WHERE (@Time = "REG" and f.[Category] IN (A, B, C, D))
or (@Time = "OT" and f.[Category] IN (E, F, G))