使用SQL批量更新记录

时间:2011-07-08 18:53:43

标签: sql sql-server sql-update

我在SQL Server 2008环境中有两个具有以下结构的表

Table1
- ID
- DescriptionID
- Description

Table2
- ID
- Description

Table1.DescriptionID映射到Table2.ID。但是,我不再需要了。我想进行批量更新,将Table1的Description属性设置为Table2中与之关联的值。换句话说,我想做这样的事情:

UPDATE
  [Table1] 
SET
  [Description]=(SELECT [Description] FROM [Table2] t2 WHERE t2.[ID]=Table1.DescriptionID)

但是,我不确定这是否是合适的方法。有人能告诉我怎么做吗?

5 个答案:

答案 0 :(得分:38)

做到:

update      Table1
set         Description = t2.Description
from        Table1 t1
inner join  Table2 t2
on          t1.DescriptionID = t2.ID

答案 1 :(得分:25)

你的方法没问题

也许稍微清楚一点(对我来说!)

UPDATE
  T1
SET
  [Description] = t2.[Description]
FROM
   Table1 T1
   JOIN
   [Table2] t2 ON t2.[ID] = t1.DescriptionID

这个和你的查询应该运行相同的性能,因为它是相同的查询,只是以不同的方式布局。

答案 2 :(得分:3)

您可以通过UPDATE

的常规JOIN来完成此操作
UPDATE T1
SET Description = T2.Description
   FROM Table1 T1
      JOIN Table2 T2
         ON T2.ID = T1.DescriptionId

答案 3 :(得分:2)

或者你可以直接更新而不使用像这样的连接:

Update t1 set  t1.Description = t2.Description from @tbl2 t2,tbl1 t1
where t1.ID= t2.ID

答案 4 :(得分:0)

您在问题中发布的SQL是一种方法。 SQL中的大多数内容都有多种方法可以实现。

UPDATE
  [Table1] 
SET
  [Description]=(SELECT [Description] FROM [Table2] t2 WHERE t2.[ID]=Table1.DescriptionID)

如果您计划在PROD数据库上运行此操作,最好先创建快照或镜像并进行测试。验证数据最终会像您期望的那样记录几次。如果您满意,请在真正的数据库上运行它。