SQL - CASE выражение внутри, где - PullRequest
7 голосов
/ 05 января 2009

Я читал об использовании выражения CASE внутри предложения WHERE:

http://scottelkin.com/sql/using-a-case-statement-in-a-sql-where-clause/

Я пытаюсь использовать это для фильтрации результатов из моего оператора выбора на основе номера контракта, который будет передан приложением пользователя. Мой код в настоящее время выдает ошибку «Неверный параметр» независимо от того, что передано. Я проверил, что SELECT / FROM работают нормально, например, как предложение WHERE без выражения CASE. Вот мой код.

WHERE     (CASE WHEN @ContractNo = 0 THEN @ContractNo ELSE @ContractNo END =
tblContracts.ContractNo)

Избыточность кода предназначена для устранения неполадок, я планирую использовать фильтрацию по шаблону на CASE позже. Я сосредоточен на снижении синтаксиса прямо сейчас. Я считаю, что это должно вернуть все записи, для которых параметр соответствует номеру контракта, хранящегося в таблице. Любая помощь или совет будет принята с благодарностью.

Ответы [ 12 ]

0 голосов
/ 05 января 2009

Зачем вам вообще нужна выписка по делу?

WHen @ContractNo = 0 затем (0 = tblContracts.ContractNo) иначе @ContractNo then (@ContractNo = tblContracts.ContractNo)

Это не имеет смысла, так как вы можете просто написать это как

Где @contractNo = tblContracts.contractNo

0 голосов
/ 05 января 2009

Разве вы не имеете в виду что-то подобное?

SELECT * 
    FROM tblContracts
    WHERE     
    CASE 
       WHEN tblContracts.ContractNo = 0 THEN @ContractNo 
       ELSE tblContracts.ContractNo
    END = tblContracts.ContractNo

Где @ContractNo - переменная того же типа данных, что и tblContracts.ContractNo

...