2016-02-23 2 views
0

У меня есть параметр на SQL, и я получил вопрос, когда речь заходит об этой ситуацииSQL логики для проверки параметра

declare @MonRemark varchar(10) = 's' 
declare @ConfBy varchar(10)= 's' 
declare @confstatus varchar(10)= 's' 
declare @StatGD varchar(10)= '' 
declare @StatGC varchar(50)= '' 
declare @STATGTWO varchar(50)= '' 



IF @MonRemark <> '' and (@ConfBy = '' OR @confstatus = '' and (@StatGD = '' or @StatGC = '' or @STATGTWO = '')) BEGIN 
    print 'a' 
END 
ELSE IF @ConfBy <> '' and (@MonRemark = '' OR @confstatus = '' AND (@StatGD = '' or @StatGC = '' or @STATGTWO = '')) BEGIN 
    print 'b' 
END 
ELSE IF @confstatus <> '' and @MonRemark = '' AND @ConfBy = '' AND (@StatGD = '' or @StatGC = '' or @STATGTWO = '') BEGIN 
    print 'c' 
END 
ELSE IF (@StatGD <> '' or @StatGC <> '' or @STATGTWO <> '') and @confstatus = '' AND @MonRemark = '' AND @ConfBy = '' BEGIN 
    print 'd' 
END 
ELSE BEGIN 
    print 'e' 
END 

если я заполнил параметр как то, что я пишу выше, я хочу, чтобы получить, но это всегда печатайте E, есть ли способ получить A?

+1

Вы никогда не получите A, если вы заполните ConfBy и Confstatus с помощью 's'. вам нужно будет изменить постоянное значение или логическое правило, чтобы получить то, что вам нужно. – cyan

+1

Это так, если вы хотите получить результат 'A', все условие должно« TRUE », но там результаты похожи на' IF TRUE и (FALSE и (TRUE)) BEGIN PRINT 'a''. Ваше условие возвращает 'FALSE', потому что' @ ConfBy' и '@ confstatus' не являются NULL. Оба '@ ConfBy' и' @ confstatus' имеют значения 'S' – JTR

ответ

2

Изменение состояния. Я думаю, @Cyan и @JTR предоставили достаточно объяснений, почему вы получаете значение 'e'

Попробуйте это, я изменил ваше условие, чтобы получить требуемые результаты.

DECLARE @MonRemark VARCHAR(10) = 's' 
DECLARE @ConfBy VARCHAR(10) = 's' 
DECLARE @confstatus VARCHAR(10) = 's' 
DECLARE @StatGD VARCHAR(10) = '' 
DECLARE @StatGC VARCHAR(50) = '' 
DECLARE @STATGTWO VARCHAR(50) = '' 

IF @MonRemark <> '' 
    AND (
     (
      @ConfBy = '' 
      OR @confstatus = '' 
      ) 
     OR (
      @StatGD = '' 
      OR @StatGC = '' 
      OR @STATGTWO = '' 
      ) 
     ) 
BEGIN 
    PRINT 'a' 
END 
ELSE IF @ConfBy <> '' 
    AND (
     @MonRemark = '' 
     OR @confstatus = '' 
     AND (
      @StatGD = '' 
      OR @StatGC = '' 
      OR @STATGTWO = '' 
      ) 
     ) 
BEGIN 
    PRINT 'b' 
END 
ELSE IF @confstatus <> '' 
    AND @MonRemark = '' 
    AND @ConfBy = '' 
    AND (
     @StatGD = '' 
     OR @StatGC = '' 
     OR @STATGTWO = '' 
     ) 
BEGIN 
    PRINT 'c' 
END 
ELSE IF (
     @StatGD <> '' 
     OR @StatGC <> '' 
     OR @STATGTWO <> '' 
     ) 
    AND @confstatus = '' 
    AND @MonRemark = '' 
    AND @ConfBy = '' 
BEGIN 
    PRINT 'd' 
END 
ELSE 
BEGIN 
    PRINT 'e' 
END 
Смежные вопросы