2012-11-09 184 views
3

跑進這個問題,我不知道爲什麼它不起作用。忽略可選參數值

我有一個存儲過程有一個可選的第二個參數。現在

PROCEDURE [dbo].[gsp_MyProC] @Account_Number VARCHAR(10), @Referral_Type VARCHAR(5) ='1' 

@Referral_Type在SQL語句中被使用,而目前永遠不會被傳遞到程序(遺留代碼,不問)。但是,有時它不會被設置爲1,它只是留給null(通過返回參數進行驗證)。

如果我使用:

SET @Referral_Type = 1 

存儲過程裏面,它總是被設置(如所預期)。

但有沒有人知道爲什麼默認值不會被設置爲1?

感謝

+0

運行SQL事件探查器並查看它是如何被調用的。有可能你的客戶端庫要求輸入參數,並填寫其他東西來提供沒有提供的東西。 – Laurence

回答

4

沒有提供參數,併爲參數提供NULL值之間的區別......

EXEC dbo.gsp_MyProC 'AccountNumber', NULL 

會導致在@Referral_Type = NULL

但是......

EXEC dbo.gsp_MyProC 'AccountNumber' 

會導致@Referral_Type = '1'

很可能您的客戶端庫提供的值爲NULL,而不是完全不提供任何值。

作爲解決方法...如果@Referral_Type不應該是NULL,則可以在存儲過程的開始處添加SET @Referral_Type = ISNULL(@Referral_Type, '1')

+0

以下也將起作用:EXEC dbo.gsp_MyProc'AccountNumber',DEFAULT –

+0

@Michael Fredrickson:我覺得真的很愚蠢,以前我沒有注意到! – Limey

0

記住,如果你改變一個參數,你必須使用OUTPUT修改的SP的定義。此外,您還可以在調用的定義中創建一個輸出參數。


東西就沒有意義了與你的答案---

SET @Referral_Type = 1 

應該是非法的,因爲常數1不是一個字符串。

正如你在你的問題描述,我希望它永遠不會設置爲1 - 它總是被設置爲'1'

也許你一直在尋找的「第一」元素的數組(或s[1])的結果?這將永遠是零,因爲字符串在C,C++和C#

空終止
+2

它在SQL Server中正常工作,它會自動轉換.... – EkoostikMartin

+0

@Hogan:Varchar可以同時使用1或'1' – Limey

+0

嗨,查看我對使用ac語言結果的評論 – Hogan