Извините, что создал новый поток. Я не смог правильно задать вопрос в потоке previous.sql query - получить все записи на основе флага
У меня есть таблица в SQL Server 2008, который выглядит следующим образом -
Id Status
--------------
1 A
2 I
3 NULL
У меня есть хранимая процедура, которая принимает @Status
в качестве параметра.
If the @Status is "-1", I need to retrieve records 1, 2.
If the @Status is "A", I need to retrieve only record 1.
If the @Status is "I", I need to retrieve only record 2.
Я хочу, чтобы иметь возможность получить записи в одном SELECT
заявления без использования IF ELSE
. В инструкции SELECT много соединений и вещей, и я не хочу повторять то же самое в состоянии ELSE.
Я попытался следующие, но получить неверные данные -
SELECT * FROM Person WHERE Status = @Status OR @Status IS NOT NULL
select * from Person
where (@Status is not null and Status = @Status) or
(@Status is null and Status in ('A', 'P'))
Почему вы не хотите использовать 'IF'? –
@Oded: Я пробовал это - 'SELECT * FROM Person WHERE Status = @Status OR @Status IS NULL', но он возвращает неверные данные. Кроме того, этот 'select * from Person где (@Status не имеет значения null и Status = @Status) или (@Status имеет значение null и Status in ('A', 'I', 'P'))' с одинаковыми результатами , – tempid
@MikaelEriksson: В операторе SELECT есть много соединений и прочее, и я не хочу повторять то же самое в состоянии «ELSE». – tempid