我想包含一条记录,只要 value_1 和 value_2 都不为 0。为什么下面的这个查询排除了记录? 我如何调整它以说“只要两个值不是同时为 0,我就想包括这两个值”? ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
疲惫的大脑——也许你能帮上忙。
我的表有两个位字段:
1) TestedByPCL
和
2) TestedBySPC
。
两者都可能 = 1。
用户界面有两个对应的复选框。 在代码中,我将检查转换为 int。
int TestedBySPC = SearchSPC ? 1 : 0;
int TestedByPCL = SearchPCL ? 1 : 0;
我的WHERE
子句看起来像这样:
WHERE TestedByPCL = {TestedByPCL.ToString()} AND TestedBySPC = {TestedBySPC.ToString()}
问题是当只选择一个复选框时,我想返回相应字段设置为 1 或两个字段都设置为 1 的行。
现在,当两个字段都设置为 1 时,我的WHERE
子句要求同时选中两个复选框,而不是只选中一个。
因此,如果选中一个复选框,则返回该字段 = 1 的记录,无论其他字段是否 = 1。
第二次尝试(我想我现在明白了):
WHERE ((TestedByPCL = {chkTestedByPCL.IsChecked} AND TestedBySPC = {chkTestedBySPC.IsChecked})
OR
(TestedByPCL = 1 AND TestedBySPC = 1 AND 1 IN ({chkTestedByPCL.IsChecked}, {chkTestedBySPC.IsChecked})))
误解了这个问题。
将
AND
更改为
OR
:
WHERE TestedByPCL = {chkTestedByPCL.IsChecked} OR TestedBySPC = {chkTestedBySPC.IsChecked}
还:
SQL 服务器没有Boolean
数据类型,它最接近的选项是bit
数据类型。
大括号的使用建议使用字符串连接来构建你的where
子句。 当您处理复选框时,这可能不是什么大问题,但在处理自由文本输入时会带来安全风险,因为它为SQL 注入攻击打开了大门。 尽可能更好地使用参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.