2012-07-18 72 views

回答

6

是的,不要求带有defau的参数lt值必须在没有参数之前或之后出现。但是这意味着如果不包含所有参数,则需要命名参数。您不能说...

EXEC dbo.UpdateTimeProc 5, 5, 1; 

...并期待1一起去@ResetCounter。如果你想保留可选参数,你需要命名参数(如康拉德的答案所示)。

让我再说一遍:上面的语法将不起作用。

你可以选择做这种方式(你只需要启动命名参数你命名的第一个后):

EXEC dbo.UpdateTimeProc 5, 5, @ResetCounter = 1; 

但我真的不建议这样做,因为人们将有查看其他参数是什么。一般来说,我们应该更喜欢使用简洁的代码来自编写代码。

+1

尼斯我没有意识到你可以混合命名和位置参数 – 2012-07-18 18:11:34

+0

@ConradFrix亲自我不认为这是一个功能,它只是启用懒惰,并禁止排除故障。 :-) – 2012-07-18 18:12:15

3

是但你必须调用它时

例如从SSMS调用会像这样

EXECUTE UpdateTimeProc @Hours = 1, @Minutes =2 , @ResetCounter = 0; 

如果您正在使用从其他客户端调用它使用命名的参数(允许例如C#),您需要在参数上不设置value属性,或者不将其包含在参数集合中

+1

无论如何命名参数都更好。 :P – canon 2012-07-18 18:09:36