2017-01-18 1 views
1

테이블의 레코드를 업데이트하는 업데이트 쿼리가 있습니다. 업데이트 할 조건을 선택하면 조건과 일치하는 715 레코드가 있지만 업데이트 쿼리를 실행할 때, 그들 중 15 명만 업데이트됩니다. 누구든지 이걸 도와 줄 수 있어요. 비교를 위해 엑셀 시트의 데이터를 임시 테이블에로드했습니다.업데이트 쿼리가 모든 레코드를 업데이트하지 않습니다.

BEGIN TRAN 
    UPDATE table1 
    SET English = CASE 
        WHEN English <> t.name THEN t.name 
        else English 
       END 

    FROM #tempdata t 
    LEFT JOIN dbo.Main m 
      ON m.Code= t.[property] 
    LEFT JOIN table1 tbv 
      ON m.filterkey= tbv.filterkey 
    where t.name != tbv.English 
    ROLLBACK TRAN 
+0

무엇을 선택합니까? 선택 결과에 'filterkey'가 유일합니까? 'table1'에서 유일합니까? –

+2

왜 당신은 'LEFT JOIN'을 업데이트 할 테이블에 넣을까요? – DVT

+0

'사례'가 중복되었습니다. 'English <> t.name '의'ELSE'는'English = t.name'을 의미하므로 ** 모든 경우 **'t.name'을 반환합니다. (어떤 값이 NULL이든 관계가 없지만, WHERE 절에 의해 제외됩니다.) –

답변

4

대부분의 아마 table1에서 데이터를 복제 조인. 다음은 복제를위한 테스트 시나리오입니다.

SET NOCOUNT ON 

DECLARE @table1 TABLE(id INT, col INT) 
DECLARE @table2 TABLE(id INT, rel_id int) 

INSERT INTO @table1 VALUES(1, NULL),(2, null) 
INSERT INTO @table2 VALUES(1, 1),(2, 1),(3,2) 


SELECT * FROM @table1 t1 
JOIN @table2 t2 ON t2.rel_id = t1.id 

SET NOCOUNT OFF 

UPDATE t1 SET col = t2.id 
FROM @table1 t1 
JOIN @table2 t2 ON t2.rel_id = t1.id 

이렇게하면 3 개가 선택되지만 2 개만 업데이트됩니다.