用选择了的值更新

第二种形式的 UPDATE 语句以单个批量赋值替代赋值列表,其中设置列的列表与值的列表相同。当这些值是简单的常量时,这种形式与前面的示例的形式没什么不同,只是重新安排它的某些部分,如下例所示:
UPDATE customer
          SET (fname, lname) = ('Barnaby', 'Dorfler')
          WHERE customer_num = 103;

以此方式编写该语句,不存在任何优势。实际上,它更难于阅读,因为将哪些值指定给哪些列并不明显。

然而,当这些要指定的值来自单个 SELECT 语句时,这种形式就很合理。假设要将地址的更改应用于几个客户。不是每次更新 customer 表都报告更改,而是在名为 newaddr 的单个临时表中收集新的地址。现在,一次性应用所有新地址的时候到了。
UPDATE customer
          SET (address1, address2, city, state, zipcode) =
          ((SELECT address1, address2, city, state, zipcode
          FROM newaddr
          WHERE newaddr.customer_num=customer.customer_num))
          WHERE customer_num IN (SELECT customer_num FROM newaddr);
单个 SELECT 语句产生多个列的值。如果您以其他形式重新编写此示例,为每一更新了的列进行赋值,您必须编写五个 SELECT 语句,为每个要更新的列编写一个。这样的语句不仅更难编写,而且它会花费更长的执行时间。
提示: 在 SQL API 程序中,您可使用记录或主变量来更新值。要获取更多信息,请参考 SQL 编程