当另一条记录为空时,不会更新表中的记录

时间:2014-05-01 22:13:41

标签: sql stored-procedures

我已经通过不同的解释发布了类似的问题。

我正在寻找以下问题的解决方案:

我有一个从我的代码调用的存储过程。

我需要更新表中的记录并将其设置为1或0.这是bit数据类型。

我的存储过程接受3个参数:region,isActive和Number:

这是我的存储过程:

ALTER PROCEDURE [dbo].[SPU_UpdateEmai] 

@region char(2),
@isoNum varchar(10),
@isActive bit

AS
BEGIN
    SET NOCOUNT ON;

    UPDATE MyTable
    SET isActive = @isActive, updatedate = GETDATE()    
    WHERE region = @region AND isonumber = @isoNum

END

当@isoNumber不为空时,我可以更新我的isActive字段,如果@isoNumber为空,则没有任何反应。

简单执行更新时:

    UPDATE ActivateEmailSendToIso
    SET isActive = 0, updatedate = GETDATE()    
    WHERE region = '04' AND isonumber is null
一切都很好。但是在运行代码时,不会发生更新。这是代码:

    using (SqlCommand cmd = new SqlCommand("SP_UpdateEmail", conn))
    {
        conn.Open();
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@region", actData.Region);
        //cmd.Parameters.AddWithValue("@isoNum", actData.IsoNumber);
        cmd.Parameters.AddWithValue("@isoNum", (actData.Equals(String.Empty)) ? (object)DBNull.Value : actData.IsoNumber);
        cmd.Parameters.AddWithValue("@isActive", actData.IsActive);
        cmd.ExecuteNonQuery();
        isRecordSaved = true;
    }

一切似乎都很好。

可能出现什么问题?

谢谢

1 个答案:

答案 0 :(得分:0)

如果您仍希望在@isoNum为空时更新记录,请将您的过程更改为:

ALTER PROCEDURE [dbo].[SPU_UpdateEmai] 

@region char(2),
@isoNum varchar(10),
@isActive bit

AS
BEGIN
    SET NOCOUNT ON;

    UPDATE MyTable
    SET isActive = @isActive, updatedate = GETDATE()    
    WHERE region = @region 
    AND (isonumber = @isoNum or @isoNum IS NULL AND isonumber IS NULL)

END