SQL Server 存储过程中的可选参数
我正在 SQL Server 2008 中编写一些存储过程。这里是否可能存在可选输入参数的概念?
我想我总是可以传入 NULL 作为我不想使用的参数,检查存储过程中的值,然后从那里获取内容,但我很感兴趣这个概念是否可用。
I'm writing some stored procedures in SQL Server 2008. Is the concept of optional input parameters possible here?
I suppose I could always pass in NULL for parameters I don't want to use, check the value in the stored procedure, and then take things from there, but I was interested if the concept is available here.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
你可以这样声明它:
You can declare it like this:
是的。如下声明参数:
现在您甚至不必传入参数。它将默认为 NULL(或您选择默认的任何值)。
Yes, it is. Declare the parameter as so:
Now you don't even have to pass the parameter in. It will default to NULL (or whatever you choose to default to).
至少在 SQL Server 2014 及更高版本中,您可以设置默认值,它将当您不传递该参数时,请接受该错误,不会错误。
部分示例:第三个参数作为可选添加。仅使用前两个参数执行(
exec
)实际过程效果很好。In SQL Server 2014 and above at least, you can set a default, and it will take that and not error when you do not pass that parameter.
Partial example: the third parameter is added as optional. Execution (
exec
) of the actual procedure with only the first two parameters worked fine.前面的答案中提到的默认值仅适用于简单的情况。在更复杂的情况下,如果参数为 NULL 或空并且需要计算,我会在存储过程开头附近使用 IF 子句来提供值。
我经常在 WHERE 子句中使用可选参数,并发现 SQL 不会短路逻辑,因此使用 CASE 语句来确保不要尝试计算 NULL 或空日期或唯一标识符,如下所示:
The default mentioned in previous answers only works for simple cases. In more complicated cases, I use an IF clause near the beginning of the stored procedure to provide a value, if the parameter is NULL or empty and calculations are required.
I often use optional parameters in the WHERE clause, and discovered that SQL does not short circuit logic, so use a CASE statement to make sure not to try to evaluate NULL or empty dates or unique identifiers, like so: