【问题标题】:Stored Procedure Parameters - sometimes NULL存储过程参数 - 有时为 NULL
【发布时间】:2011-01-19 16:09:49
【问题描述】:
我有一个存储过程来更新表。并非所有字段都是必需的,有些字段可以为空。
例如,标题不是必需的,但当它为空白时,我会收到错误
Dim ptitle As New SqlParameter("@title", SqlDbType.NVarChar, 20)
ptitle.Value = objFormat.CheckSQL(title)
myCommand.Parameters.Add(ptitle)
- ex {“过程或函数 'sp_UpdateUser' 需要参数 '@title',但未提供。”} System.Exception
如果数据字段为空白,我该如何解决它以便允许空值?
【问题讨论】:
标签:
.net
asp.net
vb.net
stored-procedures
【解决方案1】:
在您的存储过程中,将title 的默认值设置为NULL,这应该可以解决您的问题。
@title NVARCHAR(20) = NULL
【解决方案2】:
首先要做的是初始化sp_UpdateUser中@Title的值,如下:
alter procedure sp_UpdateUser
@Title varchar(50) = null,
...additional sql code here
其次,这取决于您为ptitle 到objFormat.CheckSQL(title) 提供的价值。如果它提供了一个空字符串,那么你需要在你的存储过程中添加一个额外的语句:
If @Title = '' set @Title = null
【解决方案3】:
在存储过程定义中,可以写参数的默认值,例如
@title nvarchar(20) = NULL,
...
...
这样参数是可选的,不提供时sp调用不会失败。
至少我们在 SQL 2008 存储过程中使用了这种方法。
【解决方案4】:
将输入字段转换为理智的东西。空字符串为“”,空整数为 0(如果可能)
【解决方案5】:
您可以在存储过程中将变量显式设置为 NULL 值。
【解决方案6】:
您可以在存储过程中执行此操作:
@title NVARCHAR(20) = NULL
或者在你的 vb.net 代码中使用类似的东西
Sub InsertValues (Optional Title as String = "",...)