0

ケースステートメントがあります:

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

いつ@AnsweredByでも列をnullにNULL設定します。AnsweredBy

これを行うことで、nullもテストしようとしました:

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

answeredbyつまり、値がない限り列を更新したくないということです。

私の C# コードでも、ストアド プロシージャに値を渡しません。

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

値がなければ。そして、私の sproc では、その列変数をデフォルトで null にします。

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

だから私の質問は、残りの更新をどのように実行するのansweredbyです@AnsweredByか?

4

2 に答える 2

6
SET AnsweredBy = ISNULL(@AnsweredBy, AnsweredBy)
于 2012-06-26T14:49:32.370 に答える
2
UPDATE 
    Answer 
SET 
    AnswerID = @AnswerID, 
    AnsweredBy = CASE WHEN LEN(@AnsweredBy) > 0 THEN @AnsweredBy ELSE AnsweredBy END 
于 2012-06-26T14:50:24.767 に答える