如何确定是否将默认值提供给存储过程?

时间:2010-01-28 15:58:35

标签: sql-server

存储过程的参数可能采用默认值

CREATE PROCEDURE [dbo].[FooSP] 
    @FooParam INT = 15
AS

那么有没有办法确定是否在设置@FooParam值时调用SP。

IOW,有没有办法确定用户是否打电话

exec dbo.FooSP(15)

exec dbo.FooSP()

谢谢!

2 个答案:

答案 0 :(得分:5)

如果您需要这样做,通常最好将默认值更改为某种sentinal值(NULL通常在db存储过程中运行良好)并在过程中设置一些逻辑以将值设置为旧如果收到NULL,则为默认值(在本例中为15)。

这样,您就可以获得默认值的好处,并且能够知道传入的内容。

<强>更新

如果没有可能的sentinal值 - 比如说,因为参数非常受约束,所有可能的输入都是合法的,那么你将不得不进行一些堆栈内省,或者更改函数签名。

如果您可以更改调用代码,请使用默认参数实际执行不同的过程,然后使用默认设置显式调用原始过程。

答案 1 :(得分:0)

您可能想投票给this related Connect item - 获取调用堆栈信息对于检测代码和调试情况非常有用。