我已经通过不同的解释发布了类似的问题。
我正在寻找以下问题的解决方案:
我有一个从我的代码调用的存储过程。
我需要更新表中的记录并将其设置为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;
}
一切似乎都很好。
可能出现什么问题?
谢谢
答案 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