ОК, вопрос об условном столбце umpteenth:
Я пишу хранимый proc, который принимает входной параметр, который сопоставляется с одним из нескольких столбцов флага. Каков наилучший способ фильтрации в запрошенном столбце? Я сейчас на SQL2000, но собираюсь перейти на SQL2008, поэтому я возьму современное решение, если доступно.
Таблица, запрошенная в sproc, выглядит как
ID ... fooFlag barFlag bazFlag quuxFlag
-- ------- ------- ------- --------
01 1 0 0 1
02 0 1 0 0
03 0 0 1 1
04 1 0 0 0
и я хочу сделать что-то вроде
select ID, name, description, ...
from myTable
where (colname like @flag + 'Flag') = 1
поэтому, если я вызову sproc, как exec uspMyProc @flag = 'foo'
, я вернусь к строкам 1 и 4.
Я знаю, что я не могу выполнить роль в parens непосредственно в SQL. Чтобы сделать динамический SQL, мне придется заполнить весь запрос в строку, объединить параметр @flag в предложении WHERE и затем выполнить строку. Помимо грязного чувства, которое я получаю при выполнении динамического SQL, мой запрос довольно велик (я выбираю пару десятков полей, присоединяюсь к 5 таблицам, вызывая пару функций), поэтому это большая гигантская строка из-за одной строки в 3-строчном WHERE-фильтре.
В качестве альтернативы я мог бы иметь 4 копии запроса и выбирать среди них в операторе CASE. Это оставляет код SQL непосредственно исполняемым (и подвержен синтаксису hilighting и т.д.), Но за счет повторения больших кусков кода, поскольку я не могу использовать CASE только в предложении WHERE.
Есть ли другие варианты? Какие-нибудь сложные комбинации или логические операции, которые могут быть применены? Или я должен просто преодолеть это и выполнить динамический SQL?