簡體   English   中英

SQL Server:存儲過程具有可選參數

[英]SQL Server : stored procedure to have optional parameter

我們如何為存儲過程指定默認參數?

我已經看到以下兩個選項。

選項1:

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

選項2:

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

我在C#代碼的某些地方使用了一個帶有一個參數的存儲過程。 現在,我想將其與一個可選參數一起使用。 我想確保可選參數也將具有默認值。

有什么幫助嗎? 我哪里出問題了?

我使用了以上兩種方法。 但這沒有用。 我沒有得到默認值。

僅當您根本不發送該參數時,才使用該參數的默認值。 如果要使用默認值,請不要從后面的代碼中發送參數。 使用CREATE PROCEDURE myProcedure(@dataOne INT,@dataTwo INT=3)..並且不要從后面的代碼發送@dataTwo ,則將使用3作為默認值。 希望能有所幫助。

如@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;

代替在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'參數使用默認值以外的其他值,則無需再次擔心更改存儲過程的定義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM