2012-06-26 27 views
0

我有一個case語句:更新列的是即使我不希望它發生

UPDATE 
    Answer 
SET 
    AnswerID = @AnswerID, 
    AnsweredBy = CASE WHEN LEN(@AnsweredBy) > 0 THEN @AnsweredBy END 

即使@AnsweredByNULL它仍然設置AnsweredBy列設置爲空。

我試着做這個測試空以及:

UPDATE 
    Answer 
SET 
    AnswerID = @AnswerID, 
    AnsweredBy = CASE WHEN @AnsweredBy IS NOT NULL THEN @AnsweredBy END 

含義我不想更新answeredby列,除非有一個值。除非有一個值

if (answeredBy.Length > 0) 
    cmdSelect.Parameters.Add("@AnsweredBy", SqlDbType.VarChar).Value = answeredBy; 

即使在我的C#代碼我沒有一個值傳遞給我的存儲過程。而在我的存儲過程我默認該列變量設置爲null:

@RunoffAnswerID bigint, 
@AnswerID varchar(3)=NULL, 
@AnsweredBy varchar(50)=NULL, 

所以我的問題是我如何執行我的其餘更新,因爲有大約5-10多列,但如果只更新answeredby@AnsweredBy的值?

+2

你的語句更新每一個記錄。這是正確的,還是應該只更新一條記錄?如果你不想***每個***記錄被更新,你需要一個'WHERE'子句... – MatBailie

+0

你的問題是你不告訴它如果沒有滿足案例分析行動該怎麼做,所以它沒有價值。下面的答案都可以,但我想解釋你爲什麼沒有。 – HLGEM

+0

德姆我沒有發佈我的整個查詢。 – oJM86o

回答

6
SET AnsweredBy = ISNULL(@AnsweredBy, AnsweredBy) 
+0

或使用合併 – HLGEM

2
UPDATE 
    Answer 
SET 
    AnswerID = @AnswerID, 
    AnsweredBy = CASE WHEN LEN(@AnsweredBy) > 0 THEN @AnsweredBy ELSE AnsweredBy END 
相關問題