SQL 查询:当参数为空或 NULL 时选择所有数据

通常情况下,当您创建一个 SQL 存储过程或任何接受参数的查询时,您可能会强制用户为该参数提供一个值。在实际应用中并非总是如此,因此您需要允许 NULL 值和空字符串。让我们通过示例看看如何编写 SQL 查询,以便在参数为空或为 NULL 时选择所有数据。

在此 SQL 演示中,我们将使用以下数据来演示“参数为空或 NULL 时选择所有数据”。

SQL Query to Select All If Parameter is Empty or NULL 1

通常,您可能会像下面这样编写查询

DECLARE @Occupation VARCHAR(50)
SET @Occupation = 'Clerical'
SELECT [EmpID]
      ,[FirstName]
      ,[LastName]
      ,[Education]
      ,[Occupation]
      ,[YearlyIncome]
      ,[Sales]
      ,[HireDate]
  FROM [Employee]
  WHERE Occupation = @Occupation
SQL Query to Select All If Parameter is Empty or NULL 2

如果您未提供有效的职业值,它将返回一个空表。

提示:在实际应用中,我们使用 存储过程 来执行此类操作。但是,为了使查询更简单,我们选择了一个常规的 SQL Server 查询。

SQL 查询:当参数为空或 NULL 时选择所有数据的示例

以下示例列表将向您展示获取结果的各种方法。

SQL 查询:当参数为 NULL 时选择所有数据的示例

在此示例中,我们使用 IIF 函数 和 IS NULL 来检查参数值是否为 NULL。如果为真,则 Occupation = Occupation,否则 Occupation = 用户提供的结果。

DECLARE @Occupation VARCHAR(50)
SET @Occupation = 'Management'
SELECT [EmpID]
      ,[FirstName]
      ,[LastName]
      ,[Education]
      ,[Occupation]
      ,[YearlyIncome]
      ,[Sales]
      ,[HireDate]
  FROM [Employee]
  WHERE Occupation = IIF(@Occupation IS NULL, Occupation, @Occupation)
SQL Query to Select All If Parameter is Empty or NULL 3

我将参数值更改为 NULL。

SQL Query to Select All If Parameter is Empty or NULL 4

如果您尝试输入空字符串,上述查询将返回一个空表。

SQL Query to Select All If Parameter is Empty or NULL 5

SQL 查询:当参数为 NULL 时选择所有数据的示例 2

在此示例中,我们使用 CASE 语句 和 IS NULL 来检查参数值是否为 NULL。

DECLARE @Occupation VARCHAR(50)
SET @Occupation = 'Clerical'
SELECT [EmpID]
      ,[FirstName]
      ,[LastName]
      ,[Education]
      ,[Occupation]
      ,[YearlyIncome]
      ,[Sales]
      ,[HireDate]
  FROM [Employee]
  WHERE Occupation = CASE WHEN @Occupation IS NULL THEN Occupation ELSE @Occupation END
SQL Query to Select All If Parameter is Empty or NULL 6

我将参数值调整为 NULL。

SQL Query to Select All If Parameter is Empty or NULL 7

上述查询对于空字符串返回空表。

SQL Query to Select All If Parameter is Empty or NULL 8

SQL 查询:当参数为 NULL 时选择所有数据的示例 3

在此,我们在 WHERE 子句 中使用 OR 运算符 和 IS NULL 来检查参数值是否为 NULL。

DECLARE @Occupation VARCHAR(50)
SET @Occupation = 'Skilled Manual'
SELECT [EmpID]
      ,[FirstName]
      ,[LastName]
      ,[Education]
      ,[Occupation]
      ,[YearlyIncome]
      ,[Sales]
      ,[HireDate]
  FROM [Employee]
  WHERE Occupation = @Occupation OR
		@Occupation IS NULL
SQL Query to Select All If Parameter is Empty or NULL 9

您可以看到,对于 NULL 值,该查询返回所有记录。

SQL Query to Select All If Parameter is Empty or NULL 10

并且它为 blank 值返回空表。

SQL Query to Select All If Parameter is Empty or NULL 11

SQL 查询:当参数为空或 NULL 时选择所有数据

在此示例中,我们使用了 IIF 函数 和 ISNULL。首先,ISNULL 函数检查参数值是否为 NULL。如果为真,它会将值替换为空字符串或空白。接下来,IIF 将检查参数是否为空。如果为真,Occupation = Occupation,否则 Occupation = 用户提供的结果。

DECLARE @Occupation VARCHAR(50)
SET @Occupation = 'Management'
SELECT [EmpID]
      ,[FirstName]
      ,[LastName]
      ,[Education]
      ,[Occupation]
      ,[YearlyIncome]
      ,[Sales]
      ,[HireDate]
  FROM [Employee]
  WHERE Occupation = IIF(ISNULL(@Occupation, '') = '', Occupation, @Occupation)
SQL Query to Select All If Parameter is Empty or NULL 12

让我们将参数值更改为 NULL。

SQL Query to Select All If Parameter is Empty or NULL 13

对于空参数值,它返回 Employee 表中的所有记录。

SQL Query to Select All If Parameter is Empty or NULL 14

SQL 查询:当参数为空或 NULL 时选择所有数据的示例 2

在此 SQL 示例中,我们使用 OR 运算符 和 ISNULL 函数。

DECLARE @Occupation VARCHAR(50)
SET @Occupation = 'Clerical'
SELECT [EmpID]
      ,[FirstName]
      ,[LastName]
      ,[Education]
      ,[Occupation]
      ,[YearlyIncome]
      ,[Sales]
      ,[HireDate]
  FROM [Employee]
  WHERE Occupation = @Occupation OR
 ISNULL(@Occupation, '') = ''
SQL Query to Select All If Parameter is Empty or NULL 15

NULL 参数的结果

SQL Query to Select All If Parameter is Empty or NULL 16

空字符串的结果

SQL Query to Select All If Parameter is Empty or NULL 17

SQL 查询:当参数为 NULL 时选择所有数据的示例 3

在这里,我们使用 IF-ELSE 语句。如果参数值不为 NULL,我们使用带 Where 子句的 Select 语句,否则,则不带 Where 子句

DECLARE @Occupation VARCHAR(50)
SET @Occupation = 'Professional'
IF ISNULL(@Occupation, '') <> ''
BEGIN
SELECT [EmpID]
      ,[FirstName]
      ,[LastName]
      ,[Education]
      ,[Occupation]
      ,[YearlyIncome]
      ,[Sales]
      ,[HireDate]
  FROM [SQL Tutorial].[dbo].[Employee]
  WHERE Occupation = @Occupation
END
ELSE
BEGIN
SELECT [EmpID]
      ,[FirstName]
      ,[LastName]
      ,[Education]
      ,[Occupation]
      ,[YearlyIncome]
      ,[Sales]
      ,[HireDate]
  FROM [Employee]
END
SQL Query to Select All If Parameter is Empty or NULL 18

NULL 参数的结果

SQL Query to Select All If Parameter is Empty or NULL 19

空字符串结果

SQL Query to Select All If Parameter is NULL or Blank 20