这是我想要的声明。
CREATE PROCEDURE UpdateTimeProc
(
@Hours int,
@Minutes int,
@Seconds int = 0,
@ResetCounter bit
)
答案 0 :(得分:6)
是的,不要求具有默认值的参数必须在参数之前或之后。但这意味着如果不包括所有参数,则需要命名参数。你 不能 说...
EXEC dbo.UpdateTimeProc 5, 5, 1;
...并期望1
与@ResetCounter
一致。如果要保留可选参数,则需要命名参数(如Conrad的答案所示)。
让我再说一遍:以上语法不起作用。
您可以选择这样做(您只需在命名第一个参数后开始命名参数):
EXEC dbo.UpdateTimeProc 5, 5, @ResetCounter = 1;
但我真的不推荐它,因为人们将不得不查看其他参数是什么。一般来说,我们应该更喜欢自我记录的代码而不是简洁的代码。
答案 1 :(得分:3)
是,但是在调用时必须使用命名参数
例如,来自SSMS的呼叫就像这样
EXECUTE UpdateTimeProc @Hours = 1, @Minutes =2 , @ResetCounter = 0;
如果您正在使用从其他客户端调用它(比如说C#),您需要不在参数上设置value属性或不在参数集中包含它