sql-server - 当某些参数可能留空时,使用 AND/OR 从 SQL Server 检索数据
问题描述
我正在使用存储过程从 SQL Server 检索数据。该应用程序允许用户通过几个参数进行搜索。有时用户需要将一个或多个字段留空。
例如,他们可能会按姓氏、邮政编码、种族进行搜索;或者他们可以按姓氏和邮编而不是种族进行搜索;或者他们可能只按邮编和种族进行搜索。你明白了。
只需几个参数就很容易做到。但是,现在我有十几个参数,单独编码每个可能的选项需要很长时间。
这是我尝试过的不起作用的方法:
@LastName VARCHAR(50)
@Zip NUMERIC(5)
@Race VARCHAR(10)
AS
BEGIN
SELECT *
FROM myTable
WHERE LastName = @LastName AND LastName != ''
OR ZIP = @Zip AND ZIP != ''
OR Race = @Race AND Race != ''
我怎么能同时使用 AND/OR?这会让我得到我正在寻找的结果。
解决方案
你需要使用括号
SELECT *
FROM myTable
WHERE (LastName = @LastName AND LastName != '')
OR (ZIP =@Zip AND ZIP != '')
OR (Race = @Race AND Race != '')
这样,首先执行括号中的条件,然后测试整个条件。
但是这个查询也有一个错误。如果参数 @Lastname ='Smith', @ZIP=12345, @Race ='' 那么 LastName ='Doe', ZIP=12345 的记录也将匹配。
我认为
SELECT *
FROM myTable
WHERE (LastName = @LastName OR @LastName = '')
AND (ZIP =@Zip OR @Zip = '')
AND(Race = @Race OR @Race = '')
更适合您的需求
推荐阅读
- kubernetes - 为什么 AKS 创建的 Azure 负载均衡器设置为将流量定向到节点上的端口 80 和 443,而不是服务打开的节点端口?
- angular - 从输入字段更新日期时获取 ngx-daterangepicker-material 的最新更新
- r - 未提供编码:默认为 UTF-8。性格洞察分析
- awk - 如何用awk替换找到的字符串?
- arrays - Pyspark:检查元组是否包含在元组列表中
- r - 使用 RenderPlot 在 R 中显示图形
- r - 用相同的列R替换基于另一个df的列中的一些值
- regex - 如何使用 -Filter(使用正则表达式)?
- android - Android Q foregroundServiceType 属性
- javascript - 索引表达式不是类型