1
我已經用不同的解釋發佈了類似的問題。當另一條記錄爲空時,表中的記錄不會更新
我在尋找解決以下問題:
我有一個從我的代碼調用的存儲過程。
我需要更新我的表中的記錄,並將其設置爲1或0.它是一個bit
數據類型。
我的存儲過程接受3個參數:區域,isActive和編號:
這是我的存儲過程:
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;
}
一切似乎都很好。
什麼可能是錯的?
謝謝
就個人而言,更新'updateDate'型柱應該用做觸發器 - 它可以防止你忘記在某個地方做到這一點。發生這種情況是因爲SQL不認爲「null」等於**任何**,包括另一個「null」。比較結果(除了IS NULL)是_also_ null,因爲db無法告訴答案應該是什麼。 [看到這個問題的更多信息](http://stackoverflow.com/questions/9581745/sql-is-null-and-null)。從本質上講,這是一個重複的問題,雖然是一個非常好的問題。 –
對不起,另一個問題,但我應該如何更新我的存儲過程?你能否請你用正確的答案更新我的問題? –