динамическое имя столбца в предложении where - PullRequest
1 голос
/ 09 мая 2011
declare @temp varchar(20)
declare @name varchar(20)
set @name = 'John'
set @temp  = 'e'
select * from TableA
    where   case when @temp = 'e' then [em_name]
          case when @temp = 'c' then [company_name] 
        end
          = @name

Этот запрос дает мне ошибку (не булево выражение в предложении where).

Пожалуйста, объясните, что не так в этом запросе и как я могу добиться этого без динамического sql.

поэтому, когда я даю @temp = 'C', он должен искать [company_name] = @name. и иметь длинный список @temp values(employee name, company name, city name, state name, supervisor name etc).

Ответы [ 2 ]

6 голосов
/ 09 мая 2011

В опубликованном вами фрагменте есть синтаксическая ошибка:

where   case when @temp = 'e' then [em_name]
      case when @temp = 'c' then [company_name] 
    end
      = @name

Должно быть:

WHERE CASE WHEN @temp = 'e' THEN em_name
        WHEN @temp = 'c' THEN company_name 
    END = @name

Обратите внимание, что теперь есть только одно ключевое слово CASE.Вот более распространенный синтаксис (для полноты):

DECLARE @temp VARCHAR(20)
DECLARE @name VARCHAR(20)
SET @name = 'John'
SET @temp = 'e'

SELECT *
FROM TableA
WHERE (@temp = 'e' AND [em_name] = @name)
    OR (@temp = 'c' AND [company_name] = @name)
2 голосов
/ 09 мая 2011
SELECT *
FROM TableA
WHERE (@temp = 'e' AND [em_name] = @name) OR (@temp = 'c' AND [company_name] = @name)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...