Я пытаюсь выбрать из таблицы транзакций, используя предложение IN, определяемое значением параметра varchar "@StatusCode". Если @StatusCode является «All Fail», тогда мне нужны все записи со статусом 1, 2, 3 или 5. В противном случае мне нужны записи со статусом, равным числовому значению @StatusCode. Я не нашел элегантный способ сделать это иначе, чем обернуть весь оператор select в условии if.SQL Server - Условие условного IN
Я пробовал:
SELECT * FROM Transactions
WHERE
(@StatusCode = 'All Failed' AND StatusCode IN (1,2,3,5))
OR
(IsNumeric(@StatusCode) = 1 AND StatusCode = @StatusCode)
это компилируется, но генерирует ошибку преобразования, когда я прохожу «Всего Failed», поскольку условия не оценивается лениво.
Так что я попытался с СЛУЧАЙ:
SELECT * FROM Transactions
WHERE
CASE @StatusCode
WHEN 'All Failed' THEN StatusCode IN (1,2,3,5)
ELSE StatusCode = @StatusCode
END
, но это не компилирует и дает синтаксическую ошибку в «IN».
Есть ли хороший способ сделать это? Или я застрял с
IF @StatusCode = 'All Failed'
BEGIN
SELECT * FROM Transactions
WHERE StatusCode IN (1,2,3,5)
END
ELSE
BEGIN
SELECT * FROM Transactions
WHERE StatusCode = @StatusCode
END
Какой тип вашего '@ StatusCode'? Вы пытаетесь использовать его как «строка» и «номер» - это не может быть и то, и другое. – Kritner
уверен, что он может .. он также может быть datetime .. бит .. десятичный .. просто нужно преобразовать – JamieD77
@StatusCode, переменная, является строкой. Это поле StatusCode, это числовое число. –