我正尝试使用子查询来更新MS SQL语句中的多个列。一次搜索使我找到了类似这样的东西:
UPDATE table1
SET col1 = a.col1, col2 = a.col2, col3 = a.col3 FROM
(SELECT col1, col2, col3 from table2 where <expression>) AS a
WHERE table1.col1 <expression>http://geekswithblogs.net/phoenix/archive/2009/10/13/update-multiple-columns-on-sql-server.aspx
我的问题是,在内部WHERE表达式中,我需要一个对table1中特定字段的引用:
UPDATE table1
SET col1 = a.col1, col2 = a.col2, col3 = a.col3 FROM
(SELECT col1, col2, col3 from table2 where table1.col0 = table2.col0) AS a
WHERE table1.col1 <expression>当我运行该查询时,我得到“多部分标识符"table1.col0”不能被绑定“。显然,在使用该语法时,SQL不能绑定子查询中的当前table1记录。现在,我正在重复每个字段的子查询,并使用以下语法:
UPDATE table1
SET col1 = (subquery), col2 = (subquery)...但是这会为每列执行子查询一次(这是非常昂贵的),这是我想要避免的。
有什么想法吗?
发布于 2010-01-18 05:43:06
在sql server中,可以在update查询中使用from子句。像在select中一样联接这些表。要更新的表必须包含在联接中。
update table_1
  set field_1 = table_2.value_1
  from table_1
    inner join table_2
      on (table_1.id = table_2.id)https://stackoverflow.com/questions/2082769
复制相似问题