存储过程的参数可能采用默认值
CREATE PROCEDURE [dbo].[FooSP]
@FooParam INT = 15
AS
那么有没有办法确定是否在设置@FooParam值时调用SP。
IOW,有没有办法确定用户是否打电话
exec dbo.FooSP(15)
或
exec dbo.FooSP()
谢谢!
答案 0 :(得分:5)
如果您需要这样做,通常最好将默认值更改为某种sentinal值(NULL通常在db存储过程中运行良好)并在过程中设置一些逻辑以将值设置为旧如果收到NULL,则为默认值(在本例中为15)。
这样,您就可以获得默认值的好处,并且能够知道传入的内容。
<强>更新强>
如果没有可能的sentinal值 - 比如说,因为参数非常受约束,所有可能的输入都是合法的,那么你将不得不进行一些堆栈内省,或者更改函数签名。
如果您可以更改调用代码,请使用默认参数实际执行不同的过程,然后使用默认设置显式调用原始过程。
答案 1 :(得分:0)
您可能想投票给this related Connect item - 获取调用堆栈信息对于检测代码和调试情况非常有用。