【问题标题】: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
      

      其次,这取决于您为ptitleobjFormat.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 = "",...)
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2011-07-09
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2015-06-08
                • 2012-12-14
                • 1970-01-01
                • 2013-11-25
                相关资源
                最近更新 更多