可选参数是否可以跟随t-sql存储过程中的可选参数?

z-b*_*oss 0 t-sql sql-server sql-server-2005 sql-server-2008

这是我想要的宣言.

CREATE PROCEDURE UpdateTimeProc  
(  
    @Hours int,  
    @Minutes int,  
    @Seconds int = 0,  
    @ResetCounter bit  
)
Run Code Online (Sandbox Code Playgroud)

Aar*_*and 6

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

EXEC dbo.UpdateTimeProc 5, 5, 1;
Run Code Online (Sandbox Code Playgroud)

......并希望1与之相伴@ResetCounter.如果要保留可选参数,则需要命名参数(如Conrad的答案所示).

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

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

EXEC dbo.UpdateTimeProc 5, 5, @ResetCounter = 1;
Run Code Online (Sandbox Code Playgroud)

但我真的不推荐它,因为人们将不得不查看其他参数.通常我们应该更喜欢自我记录代码而不是简洁代码.