2012-02-22 5 views
0
UPDATE MyTable SET Status = (SELECT CASE WHEN COUNT(*) > 0 
          THEN 0   
          ELSE 1 
          END 
        FROM MyTable 
        WHERE Status = 1) 
WHERE RowNumber BETWEEN 1 AND 5 
ORDER BY RowNumber 

이 상태를 MyTable에 하나 개의 행이 될 것입니다 하위 쿼리의 테이블과 동일 = 1 이있는 경우 나, 5 ROWNUMBER 1을 업데이트하는 동안 Status = 1 인 기존 레코드 인 경우RowNumber 1에서 5는 0으로 업데이트되고 RowNumber 2에서 5는 0으로 업데이트됩니다.업데이트 테이블은 내가하고 싶은 것은

그러나 위 쿼리는 일. 하위 쿼리는 전체 쿼리 전에 실행되고 하위 쿼리의 결과는 정적이어서 다른 하나가 업데이트 된 후에 하나의 레코드로 새 결과를 제공하지 않는다는 것을 의미합니다.

이 쿼리에서 Status = 1 인 테이블에 행이 없으면 모든 RowNumber 1-5가 Status = 1로 업데이트됩니다. 이것은 예상 한 것이 아닙니다.

답변

0

본인이 알고있는 내용을 완전히 이해하고 있는지는 확실하지 않지만 원래 사례의 else 절에 중첩 된 사례 문을 추가해야하는 것처럼 들립니다. 아래 코드를 참조하십시오 :

UPDATE MyTable SET Status = (SELECT CASE WHEN COUNT(*) > 0 
         THEN 0   
         ELSE CASE WHEN RowNumber = 1 THEN 1 
          ELSE 0 END 
         END 
       FROM MyTable 
       WHERE Status = 1) 
WHERE RowNumber BETWEEN 1 AND 5 
ORDER BY RowNumber 
+0

내가 원하는 것은 내 테이블에 상태 = 1 인 행이 하나만있을 것입니다. status = NULL 인 새 행이 삽입되었습니다. 나중에 상태 = 0 또는 1로 업데이트됩니다. 따라서 상태 = 1 인 기존 행이있는 경우 분명히 새 업데이트가 0으로 설정됩니다. 아니오 인 경우, 업데이트 행 중에서, 그 중 하나만 1로 설정됩니다. 이해할 수 있습니까? –

관련 문제