我在这里阅读了有关在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。我没看到壮大自己。