2011-01-19 66 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 = "",...)