2014-02-09 5 views
0

У меня есть процедура хранения, которая получает гендерное значение, которое может быть мужчиной, женщиной или и тем, и мне нужно иметь возможность условия my where, чтобы, если значение @gender равно " то выбор должен возвращать мужчин и женщин, но если пол является либо мужчиной, либо женщиной, тогда необходимо выбрать значение @gender. Я попробовал ниже запрос, и он дает неверную синтаксическую ошибку для где.sql server using where with if else condition

выберите FirstName, SecondName, пол, раса, высота, HeightUnit, вес, WeightUnit, EmailAdd из добровольцев

IF @gender = 'both' 
BEGIN 

    WHERE Gender = 'male' or Gender ='female' 

END ELSE BEGIN 

    WHERE Gender = @gender 
END 
+0

я не получаю дикие карты, используемые в Мале% ... Насколько я знаю, есть только два пола: мужчина или женщина ... – Maverick

+0

Вы не можете поставить инструкцию IF в предложение WHERE, подобное этому ... либо вы используете Dynamic SQL, который был бы излишним, либо вы используете дело. – logixologist

ответ

2

Вы не можете использовать if иметь условное where положение. Вместо этого, просто поместите логику в запросе:

на основе ОП, вы хотите:

select FirstName, SecondName, Gender, race, Height, HeightUnit, 
     Weight, WeightUnit, EmailAdd 
from volunteers 
where @gender = 'both' and gender in ('male', 'female') or 
     gender = @gender; 

С другой стороны, это может быть достаточно:

select FirstName, SecondName, Gender, race, Height, HeightUnit, 
     Weight, WeightUnit, EmailAdd 
from volunteers 
where @gender = 'both' or 
     gender = @gender; 
0

Ok Если я правильно понять вас ... попробуйте так:

select FirstName,SecondName, 
CASE When @Gender = 'both' then 'Male, Female' else @Gender as Gender END 
,race,Height,HeightUnit, Weight,WeightUnit,EmailAdd from volunteers 

Вы можете настроить именно то, что вы хотите сказать, но это идея

UPDATE: в комментариях это полная процедура, что он использует:

Create PROCEDURE spSelectUpdateTrial 

    @gender nvarchar(50), 
    @minage nvarchar(150), 
    @maxage nvarchar(150), 
    @country nvarchar(50), 
    @smoking nvarchar (50), 
    @smoke nvarchar(50), 
    @nct nvarchar(50) AS 

    select FirstName, 
SecondName, 
CASE 
When @Gender = 'both' 
then 'Male, Female' 
else @Gender 
END 
as 
Gender, 
race, 
Height, 
HeightUnit, 
Weight, 
WeightUnit, 
EmailAdd 
from volunteers 

Примечание Я добавил END после else @gender

+0

Я не знаю, как здесь используется @gender, так что, возможно, вы действительно имеете в виду Пол (исходящий из базы данных), а не '@ Gender', который, как я полагаю, передается параметром. – logixologist

+0

yes ATgender - это параметр для зр, я использовал для кода, но получаю ошибку рядом 'как Пол' Create ПРОЦЕДУРА spSelectUpdateTrial ATgender NVARCHAR (50), \t ATminage NVARCHAR (150), \t ATmaxage NVARCHAR (150), \t ATcountry NVARCHAR (50), \t ATsmoking NVARCHAR (50), ATsmoke NVARCHAR (50), \t ATnct NVARCHAR (50) AS выберите FirstName, SecondName, случай, когда ATGender = 'и', затем 'мужской, женский' еще ATGender, как пол, раса, высота, HeightUnit, вес, WeightUnit, EmailAdd из добровольцев –

+0

Вы пропускаете и END после @Gender – logixologist