存储过程参数 - 有时为NULL

时间:2011-01-19 16:09:49

标签: .net asp.net vb.net stored-procedures

我有一个存储过程来更新表。不是所有字段都是必需的,有些字段可能是空白的。

例如,标题不是必需的,但是当它为空时我会收到错误

          Dim ptitle As New SqlParameter("@title", SqlDbType.NVarChar, 20)
    ptitle.Value = objFormat.CheckSQL(title)
    myCommand.Parameters.Add(ptitle)
  • ex {“过程或函数'sp_UpdateUser'需要参数'@title',这是未提供的。”} System.Exception

如何修复它,以便在数据字段为空时允许空值?

6 个答案:

答案 0 :(得分:4)

在您的存储过程中,为title提供默认值NULL,这可以解决您的问题。

@title NVARCHAR(20) = NULL

答案 1 :(得分:1)

首先要做的是在sp_UpdateUser中初始化@Title的值:

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

...additional sql code here

其次,它取决于您为ptitleobjFormat.CheckSQL(title)提供的价值。如果它提供一个空字符串,那么你需要在存储过程中添加一个附加语句:

If @Title = '' set @Title = null

答案 2 :(得分:0)

在存储过程定义中,您可以编写参数的默认值,例如

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

这样,参数是可选的,当你不提供时,sp调用不会失败。

至少我们在SQL 2008存储过程中使用这种方法。

答案 3 :(得分:0)

将输入字段转换为理智。空字符串为“”,空值为0(如果可能)

答案 4 :(得分:0)

您可以在存储过程中将变量显式设置为NULL值。

答案 5 :(得分:0)

您可以在存储过程中执行此操作:

@title NVARCHAR(20) = NULL

或者在你的vb.net代码中使用这样的东西

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