使用SQL批量更新记录

use*_*662 21 sql sql-server sql-update

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

Table1
- ID
- DescriptionID
- Description

Table2
- ID
- Description
Run Code Online (Sandbox Code Playgroud)

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

UPDATE
  [Table1] 
SET
  [Description]=(SELECT [Description] FROM [Table2] t2 WHERE t2.[ID]=Table1.DescriptionID)
Run Code Online (Sandbox Code Playgroud)

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

Toc*_*cco 39

这样做:

update      Table1
set         Description = t2.Description
from        Table1 t1
inner join  Table2 t2
on          t1.DescriptionID = t2.ID
Run Code Online (Sandbox Code Playgroud)

  • 您没有别名,您可以引用您在from子句中指定的别名.就像我的回答和我之前的回答:http://stackoverflow.com/questions/982919/sql-update-query-using-joins/982947#982947和MSDN http://technet.microsoft.com/en -us/library/ms177523.aspx你可以`UPDATE table_alias`"table_alias:FROM子句中指定的别名,表示要从中更新行的表或视图." (4认同)
  • 我喜欢在UPDATE中使用别名.没有区别,但是要明确FROM我实际更新中的哪个表.对自联接等有用 (3认同)

gbn*_*gbn 25

你的方法还可以

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

UPDATE
  T1
SET
  [Description] = t2.[Description]
FROM
   Table1 T1
   JOIN
   [Table2] t2 ON t2.[ID] = t1.DescriptionID
Run Code Online (Sandbox Code Playgroud)

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

  • +1告诉他perf是一样的.不过,到目前为止你的阅读更容易. (4认同)