2011-01-19 131 views
1

我有一個存儲過程來更新表。並非所有字段都是必需的,有些可能是空白的。存儲過程的參數 - 有時NULL

例如,不需要頭銜,但是當它是空白我得到一個錯誤

  Dim ptitle As New SqlParameter("@title", SqlDbType.NVarChar, 20) 
    ptitle.Value = objFormat.CheckSQL(title) 
    myCommand.Parameters.Add(ptitle) 
  • 前{「過程或函數‘sp_UpdateUser’需要參數‘@title’,但未提供。 「} System.Exception

我該如何解決它,以便它允許空值,如果數據字段爲空?

回答

4

在您的存儲過程,給出NULLtitle的默認值,這應該解決您的問題。

@title NVARCHAR(20) = NULL 
+0

太棒了!謝謝! – 2011-01-19 16:15:11

0
在存儲過程定義

,你可以這樣寫參數的默認值,例如

@title爲nvarchar(20)= NULL, ... ...

該參數是可選的,當你沒有提供它的SP調用不會失敗。

至少我們用SQL 2008的存儲過程這一做法。

0

將輸入字段轉換爲理智的。空字符串「」和Null整數爲0(如果可能)

0

您可以明確設置你的變量在存儲過程中NULL值。

1

做的第一件事是初始化@Title在sp_UpdateUser值作爲這樣的:

alter procedure sp_UpdateUser 
@Title varchar(50) = null, 

...additional sql code here 

其次,它取決於你通過objFormat.CheckSQL(title)提供給ptitle什麼價值。如果它提供了一個空字符串,那麼你就需要一個額外的聲明在您的存儲過程:

If @Title = '' set @Title = null 
0

你可以這樣做你的存儲過程中:

@title NVARCHAR(20) = NULL 

或使用像這樣在你的vb.net代碼

Sub InsertValues (Optional Title as String = "",...)