2013-05-15 3 views
0

Я хотел бы получить все записи (6 строк) от testTable, если a = 4. 4 - параметр по умолчанию в SP.Выражение случая в том, где статья

create table testTable(a int, b int, c int) 
go 
insert into testTable values(2, 101, 100000) 
go 
insert into testTable values(2, 101, 100001) 
go 
insert into testTable values(3, 101, 100002) 
go 
insert into testTable values(3, 102, 100003) 
go 
insert into testTable values(4, 1, 100004) 
go 
insert into testTable values(4, 1, 100005) 
go 

create proc SPtest 
       @a int = 4, 
       @b int = 1 
as 
select  * from testTable where a = @a and b = @b 

exec SPtest 2, 101 

Над работой хорошо. но мне нужно что-то вроде этого:

declare @a int 
set @a = 4 

select * 
from testTable 
where a = case @a when 4 then select distinct a from testTable end 
+0

'CASE' в SQL Server может возвращать только "атомные" значения - вы не можете запустить код T-SQL внутри' CASE' заявление. Вам нужно будет прочитать эти различные значения из таблицы и сохранить их в переменной ** перед ** выполнением этого выбора с помощью случая в предложении where –

ответ

0

Существует несколько способов сократить куки-файлы, это кажется наиболее логичным;

IF @a = 4 THEN 
BEGIN 
    SELECT * 
    FROM testTable 
END 
ELSE 
BEGIN 
    SELECT * 
    FROM testTable 
    WHERE a = @a and b = @b 
END 

В качестве альтернативы вы можете использовать инструкцию или;

SELECT * 
FROM testTable 
WHERE @a = 4 or (a = @a and b = @b) 

Удачи (прокомментировал бы, но я еще нет).

С уважением,

+0

Спасибо за попытку, но мне нужно: –

+0

Нажатый ввод случайно , Мне нужно, если @a = 3 или @a = 2, чтобы увидеть только 2 строки. Если @a = 4, мне нужно увидеть все 6 записей, без использования «IF». Это просто дополнение к большому запросу. –

0

Пожалуйста, попробуйте следующее:

create proc SPtest 
    @a int = 4, 
    @b int = 1 
as 
if @a = 4 
    select distinct a from testTable 
else 
    select * from testTable where a = @a and b = @b 
go 
exec SPtest 
exec SPtest 3,101 
+0

Это простое решение, используя «IF». Я не хочу иметь огромный запрос дважды в SP. Я хотел бы решить проблему, используя выражение «CASE», как я сказал в оригинальном вопросе. Спасибо, в любом случае. –

+0

Попробуйте это: выберите * из testTable, где @a = 4 или (a = @a и b = @b) – PollusB