2015-01-09 2 views
2

Я должен написать запрос в SQL, который вернет идентификатор учетной записи.В Where where добавьте проверку, если параметр пуст, строка

Для этого запроса у меня есть параметры ввода, которые могут быть пустыми.

В базе данных здесь находятся строки, где какое-либо поле пусто или пусто. Поэтому, если параметр пуст, мне также нужно проверить поле, если оно равно null.

SELECT a.Account_ID 
    FROM Accounts a 
    WHERE a.FirstName = @FirstName /*Add check if @FirstName = '' then a.FirstName IS NULL */ 
     AND a.LastName = @LastName 
     AND a.Middle = @MiddleName 
     AND a.Email = @Email 
     AND a.Company = @Company 

ответ

1

Я думаю, что это условие или вам необходимо:

SELECT a.Account_ID 
    FROM Accounts a 
    WHERE ((@FirstName='' and a.FirstName is null) or a.FirstName = @FirstName) /*Add check if @FirstName = '' then a.FirstName IS NULL */ 
     AND a.LastName = @LastName 
     AND a.Middle = @MiddleName 
     AND a.Email = @Email 
     AND a.Company = @Company 
+0

Мне нравится ваш ответ. Даже если это почти то же самое с ответом @gordatron, я думаю, что проверка '(@firstname! = '' AND a.FirstName = @FirstName) необходимо – demo

+0

@demo Я так не думаю. если '@firstname! = ''' первая часть запроса возвращает false, а вторая часть выполняет. if '(@firstname = ''' будет выполняться только первая часть. – Jens

+0

так что ответ @gordatron закрывает все случаи? – demo

0

я обычно делаю что-то вроде этого, если я хочу специальное поведение для пустого Params: «! И пар =»

SELECT a.Account_ID 
FROM Accounts a 
WHERE 
(
    (@firstname != '' AND a.FirstName = @FirstName) 
    OR (@firstname = '' AND a.FirstName is null) 
) 
AND a.LastName = @LastName AND a.Middle = @MiddleName 
AND a.Email = @Email AND a.Company = @Company 

У меня есть квадратные скобки OR, который обрабатывает аргументы в пользу пар = «» специально ,

0

Не уверен, если я понимаю вопрос, но поможет ли это?

SELECT a.Account_ID 
FROM Accounts a 
WHERE ISNULL(a.FirstName,'') = @FirstName 
    AND a.LastName = @LastName 
    AND a.Middle = @MiddleName 
    AND a.Email = @Email 
    AND a.Company = @Company 
0

Попробуйте это:

SELECT a.Account_ID 
FROM Accounts a 
WHERE 1 = (CASE WHEN @FirstName != '' AND a.FirstName = @FirstName THEN 1 
       WHEN @FirstName = '' AND a.FirstName IS NULL THEN 1 
       ELSE 0 
      END) AND 
     a.LastName = @LastName AND 
     a.Middle = @MiddleName AND 
     a.Email = @Email AND 
     a.Company = @Company 
0

тематическом положение может быть точно так же используется в где условия, как и в списке выбранных полей:

SELECT a.Account_ID 
    FROM Accounts a 
    WHERE case when @FirstName = '' then a.FirstName = @FirstName 
       else a.FirstName IS NULL 
      end 
     AND a.LastName = @LastName 
     AND a.Middle = @MiddleName 
     AND a.Email = @Email 
     AND a.Company = @Company