首页 > 解决方案 > 当某些参数可能留空时,使用 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?这会让我得到我正在寻找的结果。

标签: sql-serverstored-procedures

解决方案


你需要使用括号

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 = '')

更适合您的需求


推荐阅读