SQL Server:存储过程具有可选参数

时间:2015-08-31 07:58:50

标签: c# sql stored-procedures optional

我们如何为存储过程指定默认参数?

我见过以下两个选项。

选项1:

CREATE PROCEDURE myProcedure(@dataOne INT, @dataTwo INT = DEFAULT)

选项2:

CREATE PROCEDURE myProcedure(@dataOne INT, @dataTwo INT = 3)

我在C#代码的某些地方使用了这个存储过程和一个参数。现在我想将它与一个可选参数一起使用。我想确保可选参数也具有默认值。

请帮忙吗?我哪里出错?

我使用了上述两种方法。但它没有用。我没有得到默认值。

3 个答案:

答案 0 :(得分:4)

仅当您根本不发送该参数时,才使用参数的默认值。如果要使用默认值,请不要从代码后面发送参数。 使用CREATE PROCEDURE myProcedure(@dataOne INT,@dataTwo INT=3).. 并且不要从代码后面发送@dataTwo,然后将3用作默认值。 希望它有所帮助。

答案 1 :(得分:0)

如@Shaminder S Aujla所述,只有在未通过价值时才会使用默认值。

演示测试代码:

创建程序

CREATE PROCEDURE [dbo].[myProcedure]
        @dataOne            Int
    ,@dataTwo           Int = 3
As
Begin

    Set Nocount On;

    ----TSQL Statements

    ----TODO: remove after 'optional parameter works perfectly' get confirmed
    ----testing optional parameter from MSSQL Management Studio itself
    Select   @dataOne As CompulsaryParameterValue
            ,@dataTwo As OptionalParameterValue

End

测试程序

---- testing with default value
Exec dbo.myProcedure @dataOne = 5;

---- testing with passed value
Exec dbo.myProcedure @dataOne = 5, @dataTwo = 7;
完成测试后

删除程序

---- drop as testing done.
Drop Procedure dbo.myProcedure;

答案 2 :(得分:0)

不是在CREATE PROCEDURE命令中为参数设置默认值,而是在单独的SQL语句中设置该值。此SQL语句将包含在存储过程定义中。

CREATE PROCEDURE myProcedure(@dataOne INT,@dataTwo INT)
AS
IF(@dataTwo IS NULL OR @dataTwo = '')
BEGIN
   SET @dataTwo = 3 --(your default value)
END

优势:如果您要为“@dataTwo”参数使用非默认值,则无需再担心更改存储过程的定义。