我们如何为存储过程指定默认参数?
我见过以下两个选项。
选项1:
CREATE PROCEDURE myProcedure(@dataOne INT, @dataTwo INT = DEFAULT)
选项2:
CREATE PROCEDURE myProcedure(@dataOne INT, @dataTwo INT = 3)
我在C#代码的某些地方使用了这个存储过程和一个参数。现在我想将它与一个可选参数一起使用。我想确保可选参数也具有默认值。
请帮忙吗?我哪里出错?
我使用了上述两种方法。但它没有用。我没有得到默认值。
答案 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”参数使用非默认值,则无需再担心更改存储过程的定义。