繁体   English   中英

在 SQL Server 的 WHERE 子句中按变量选择所有行

[英]Select all rows by variable in WHERE clause in SQL Server

我有一个程序,有时我想选择 myBool = 0 的行,有时是 1,有时是所有行(所以不要介意它是 0 还是 1)。 如何编写一个表达式来执行它但在 WHERE 子句中使用局部变量? 所以要像这样构造:

SELECT * FROM table WHERE myBool = @myBool;

规范的方法是允许@myBool接受NULL值:

WHERE myBool = @myBool OR @myBool IS NULL

我应该注意到这并没有优化好。 但是,如果您只有两个值,那么无论如何都不会使用索引。

如果您想要两者,则不需要传递1 or 0使其为 null :

where (myBool = @myBool or @myBool is null)

考虑到简单性,我建议对@MyBool使用值10NULL ,然后您可以执行以下操作:

SELECT {Columns}
FROM dbo.YourTable
WHERE MyBool = @MyBool
   OR @MyBool IS NULL;

但是请注意,这可能会导致一些错误的查询计划缓存,因此我建议将OPTION (RECOMPILE)添加到查询中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM