2017-01-18 67 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

你为什么要''加入'到你将要更新的表格? – DVT

+0

你的'CASE'是多余的。英文<> t.name'的ELSE意味着'英文= 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行。