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

时间:2012-07-18 18:04:43

标签: sql-server sql-server-2008 tsql sql-server-2005

这是我想要的声明。

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

2 个答案:

答案 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属性或不在参数集中包含它