2017-01-18 11 views
1

テーブル内のレコードを更新する更新クエリがあります。更新する条件を選択すると、条件に一致するレコードが715個ありますが、彼らの15人だけが更新されます。誰もがこれで私を助けることができます。私は、比較のためにExcelシートからのデータを一時テーブルにロードしました。更新クエリがすべてのレコードを更新していません

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

あなたの 'CASE'は冗長です。 '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行しか更新しません。

関連する問題