使用绑定的多部分标识符更新SQL中的多个列

时间:2010-01-17 21:38:54

标签: sql tsql sql-update

我正在尝试使用子查询更新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)...

但是每列执行一次子查询(非常昂贵),我想避免这种情况。

有什么想法吗?

3 个答案:

答案 0 :(得分:10)

在sql server中,您可以在更新查询中使用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)

答案 1 :(得分:2)

您的汽车使用CROSS APPLY命令更新子选择

中的多个列
UPDATE t1
SET t1.col1 = a.col1, t1.col2 = a.col2, t1.col3 = a.col3 
FROM table1 t1
CROSS APPLY
(SELECT col1, col2, col3 from table2 where table1.col0 = table2.col0) a(col1,col2,col3)

答案 2 :(得分:1)

或者如果您不喜欢连接语法,这也可以起作用:

UPDATE table1
SET col1 = a.col1, col2 = a.col2, col3 = a.col3 
FROM table1, table2 as a
WHERE table1.col0 = a.col0
AND table1.col1 <expression>