2012-06-26 2 views
0

가 나는 경우 문을 가지고 일하지 않으려는 경우에도이 문제가 발생합니다.업데이트 나는

나는이 작업을 수행하여뿐만 아니라 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, 

그래서 내 질문이 5-10 더 많은 열이 있지만이있는 경우에만 answeredby를 업데이트하기 때문에, 내 업데이트의 나머지 부분을 수행 할 방법입니다 @AnsweredBy의 값?

+2

귀하의 문은 모든 단일 레코드를 업데이트하고 있습니다. 그게 맞습니까? 아니면 단일 레코드 만 업데이트해야합니까? *** 모든 *** 레코드가 업데이트되기를 원하지 않으면'WHERE' 절이 필요합니다 ... – MatBailie

+0

문제는 사건 처리 작업이 충족되지 않으면 어떻게해야하는지 알려주지 않는 것입니다 , 그래서 그것은 값을 null로 만듭니다. 아래 답변 중 하나가 효과가 있지만 귀하의 이유가 무엇인지 설명하고 싶습니다. – HLGEM

+0

Dems 나는 전체 쿼리를 게시하지 않았다. – 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 
관련 문제