[英]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.