我在这里阅读了有关在WHERE子句中使用CASE表达式的信息:

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

我正在尝试使用此方法根据契约(Contract)编号(该契约(Contract)编号将由用户的应用程序传递)从我的select语句中过滤出结果。无论传入什么内容,当前我的代码都会引发“无效参数”错误。我验证SELECT/FROM可以正常工作,就像没有CASE表达式的WHERE子句一样。这是我的代码。

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

代码的冗余是出于故障诊断的目的,我计划稍后在CASE上使用通配符过滤。我现在专注于简化语法。我相信这应该返回参数与表中存储的契约(Contract)编号匹配的所有记录。任何帮助或建议,将不胜感激。

最佳答案

阅读您的解释后,没有CASE的话,还有更好的方法:

WHERE @ContractNo = 0 OR tblContracts.ContractNo = @ContractNo

这将仅返回匹配的契约(Contract)编号,除非@ContractNo为0,在这种情况下它将返回所有记录。

编辑:我刚刚注意到casperOne proposed the same thing。我没看到壮大自己。

10-07 17:26