繁体   English   中英

存储过程输入参数 = “全部”

[英]Stored procedure input parameters = “All”

将存储过程的输入参数设置为“ALL”是什么意思?

例如:

WHERE desk = @desk OR @desk = "ALL"

All是内置的 SQL 关键字吗? 就像您可以简单地在任何存储过程中指定All而无需调整表数据一样,它会简单地返回所有记录吗?

不,它不是关键字。 也就是说,如果用户提供单词'ALL'作为@desk的参数,则不应检查列desk 在英语中,该查询读取(向后阅读):

如果用户提供了字符串“ALL”,那么他们希望查看所有办公桌。
否则,请检查他们要求的特定办公桌。

一个可选参数的性能不是很好,等到你得到 10 个可选参数。 看一些背景:

(在这些情况下,您可以认为NULL等同于单词'ALL' ——它们都表示用户不想在该列上进行过滤。)

是的, ALL是 SQL 关键字。 它可以在以下情况下使用:

where x >= all (select y from t)

但是, "ALL"不是 SQL 关键字。 SQL 服务器在这种情况下接受它的唯一方法是它是否是表中的列。

我怀疑情况是否如此。 我猜你真正想要的是一个字符串

WHERE desk = @desk OR @desk = 'ALL'

请注意,单引号与双引号完全不同。

在这种情况下,它只是一个字符串和一个约定,让编写此代码的人获取所有内容。 它绝不是标准的。 事实上,虽然没有标准,但通常首选NULL

WHERE desk = @desk OR @desk IS NULL

NULL'ALL'有两个优点:

  • 它适用于所有数据类型。
  • 它不能与实际值混淆,因为=无论如何都不适用于NULL

如果您还想测试NULL值,事情会变得有点棘手,但这不是您在这里提出的问题。

正如 Aaron 所说,“ALL”不是关键字。

如果要在传递关键字“ALL”的情况下返回所有记录,可以执行以下操作:

WHERE 
   1 = CASE 
          WHEN @desk="ALL" THEN 1
          WHEN desk=@desk THEN 1
          ELSE 0
       END

暂无
暂无

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

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