0

这是我想要的声明。

CREATE PROCEDURE UpdateTimeProc  
(  
    @Hours int,  
    @Minutes int,  
    @Seconds int = 0,  
    @ResetCounter bit  
)
4

2 回答 2

6

是的,没有要求具有默认值的参数必须位于没有的参数之前或之后。但这意味着如果您不包括所有参数,则需要命名参数。你不能说...

EXEC dbo.UpdateTimeProc 5, 5, 1;

...并期望1@ResetCounter. 如果您想保留可选参数,则需要命名参数(如康拉德的回答所示)。

让我重复一遍:上面的语法不起作用。

您可以选择这样做(您只需在命名第一个参数后开始命名参数):

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

但我真的不推荐它,因为人们必须查看其他参数是什么。一般来说,我们应该更喜欢自记录代码而不是简洁的代码。

于 2012-07-18T18:08:17.153 回答
3

是的,但是你必须在调用它时使用命名参数

例如,从 SSMS 调用就像这样

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

如果您使用从另一个客户端调用它(比如说 C#),您需要要么不设置参数的 value 属性,要么不将其包含在参数集合中

于 2012-07-18T18:08:07.703 回答