UPDATE authors SET authors.au_fname = 'Annie' WHERE au_fname = 'Anne'
FROM 子句中指定的表的别名不能作为 SET column_name 子句中的限定符使用。例如,下面的内容无效:
UPDATE titles SET t.ytd_sales = t.ytd_sales + s.qty FROM titles t, sales s WHERE t.title_id = s.title_id AND s.ord_date = (SELECT MAX(sales.ord_date) FROM sales)
若要使上例合法,请从列名中删除别名 t。
UPDATE titles SET ytd_sales = t.ytd_sales + s.qty FROM titles t, sales s WHERE t.title_id = s.title_id AND s.ord_date = (SELECT MAX(sales.ord_date) FROM sales)
SET @variable = column = expression 将变量设置为与列相同的值。这与 SET @variable = column, column = expression 不同,后者将变量设置为列更新前的值。
FROM < table_source >
指定用表来为更新操作提供准则。有关更多信息,请参见 FROM。
table_name [[AS] table_alias ] 为更新操作提供准则的表的名称。 如果所更新表与 FROM 子句中的表相同,并且在 FROM 子句中对该表只有一个引用,则指定或不指定 table_alias 均可。如果所更新表在 FROM 子句中出现了不止一次,则对该表的一个(且仅仅一个)引用不能指定表的别名。FROM 子句中对该表的所有其它引用都必须包含表的别名。
view_name [ [ AS ] table_alias ] 为更新操作提供准则的视图的名称。带 INSTEAD OF UPDATE 触发器的视图不能是含有 FROM 子句的 UPDATE 的目标。
WITH ( < table_hint > [ ...n ] ) 为源表指定一个或多个表提示。有关表提示的信息,请参见本卷的"FROM"。
{ MERGE | HASH | CONCAT } UNION 指定所有的 UNION 操作通过合并、哈希或串联 UNION 集合来完成。如果指定了不止一个 UNION 提示,查询优化器就会从这些指定的提示中选择开销最少的策略。
说明 如果在 FROM 子句中亦为任何特定联接表对指定了联接提示,则该提示优先于任何 OPTION 子句中指定的联接提示。
FAST number_rows 指定对查询进行优化,以便快速检索第一个 number_rows(非负整数)。在第一个 number_rows 返回后,查询继续进行并生成完整的结果集。
FORCE ORDER 指定查询语法所指示的联接顺序在查询优化过程中予以保留。
MAXDOP number 只对指定了 sp_configure 的 max degree of parallelism 配置选项的查询替代该选项。当使用 MAXDOP 查询提示时,所有和 max degree of parallelism 配置选项一起使用的语义规则均适用。有关更多信息,请参见 max degree of parallelism 选项。
ROBUST PLAN 强制查询优化器尝试执行一个计划,该计划以性能为代价获得最大可能的行大小。如果没有可行的计划,则查询优化器返回错误,而不是将错误检测延迟至查询执行。行可能包含长度可变的列;SQL Server 允许定义最大可能大小超出 SQL Server 处理能力的行。通常,应用程序存储实际大小在 SQL Server 处理能力范围内的行,而不管最大可能大小。如果 SQL Server 遇到过长的行,则返回执行错误。 KEEP PLAN
强制查询优化器对查询放宽估计的重新编译阈值。当对表中索引列的更改(更新、删除或插入)达到估计数目时查询会自动重新编译,该估计数目即为重新编译阈值。指定 KEEP PLAN 将确保当表有多个更新时不会频繁地对查询进行重新编译。
对于用于远程表以及本地和远程分区视图的 UPDATE 语句,忽略 SET ROWCOUNT 选项的设置。
如果 ANSI_PADDING 设置为 OFF,则会从插入 varchar 和 nvarchar 列的数据中删除所有尾随空格,但只包含空格的字符串除外。这些字符串被截断为空字符串。如果 ANSI_PADDING 设置为 ON,则插入尾随空格。Microsoft SQL Server ODBC 驱动程序和用于 SQL Server 的 OLE DB 提供程序自动对每个连接设置 ANSI_PADDING ON。这可在 ODBC 数据源中进行配置,或者通过设置连接特性或属性进行设置。
使用 WHERE CURRENT OF 子句的定位更新将在游标的当前位置更新单行。这比使用 WHERE <search_condition> 子句限定要更新的行的搜索更新更为精确。当搜索条件不唯一标识一行时,搜索更新将修改多行。
如果 UPDATE 语句包含了未指定每个所更新列的位置只有一个可用值的 FROM 子句(换句话说,如果 UPDATE 语句是不确定性的),则其结果将不明确。例如,对于下面脚本中的 UPDATE 语句,表 s 中的两行都满足 UPDATE 语句中的 FROM 子句的限定条件,但是将用 s 的哪一行来更新表 t 内的行是不明确的。
CREATE TABLE s (ColA INT, ColB DECIMAL(10,3)) GO CREATE TABLE t (ColA INT PRIMARY KEY, ColB DECIMAL(10,3)) GO INSERT INTO s VALUES(1, 10.0) INSERT INTO s VALUES(1, 20.0) INSERT INTO t VALUES(1, 0.0) GO UPDATE t SET t.ColB = t.ColB + s.ColB FROM t INNER JOIN s ON (t.ColA = s.ColA) GO
当组合 FROM 和 WHERE CURRENT OF 子句时,可能发生同样的问题。在本例中,表 t2 中的两行都满足 UPDATE 语句中的 FROM 子句的限定条件。将用表 t2 的哪一行来更新表 t1 中的行是不明确的。
CREATE TABLE t1(c1 INT PRIMARY KEY, c2 INT) GO CREATE TABLE t2(d1 INT PRIMARY KEY, d2 INT) GO INSERT INTO t1 VALUES (1, 10) INSERT INTO t2 VALUES (1, 20) INSERT INTO t2 VALUES (2, 30) go
DECLARE abc CURSOR LOCAL FOR SELECT * FROM t1
OPEN abc
FETCH abc
UPDATE t1 SET c2 = c2 + d2 FROM t2 WHERE CURRENT OF abc GO
UPDATE publishers SET city = 'Atlanta', state = 'GA'
本示例将所有出版商的名字变为 NULL。
UPDATE publishers SET pub_name = NULL
也可以在更新中使用计算值。本示例将表 titles 中的所有价格加倍。
UPDATE titles SET price = price * 2
B.把 WHERE 子句和 UPDATE 语句一起使用 WHERE 子句指定要更新的行例如,在下面这个虚构的事件中,北加利福尼亚更名为 Pacifica(缩写为 PC),而奥克兰的市民投票决定将其城市的名字改为 Bay City。这个例子说明如何为奥克兰市以前的所有居民(他们的地址已经过时)更新表 authors。
UPDATE authors SET state = 'PC', city = 'Bay City' WHERE state = 'CA' AND city = 'Oakland'
UPDATE titles SET ytd_sales = titles.ytd_sales + sales.qty FROM titles, sales WHERE titles.title_id = sales.title_id AND sales.ord_date = (SELECT MAX(sales.ord_date) FROM sales)
UPDATE titles SET ytd_sales = (SELECT SUM(qty) FROM sales WHERE sales.title_id = titles.title_id AND sales.ord_date IN (SELECT MAX(ord_date) FROM sales)) FROM titles, sales
D. 将 UPDATE 语句与 SELECT 语句中的 TOP 子句一起使用 这个例子对来自表 authors 的前十个作者的 state 列进行更新。
UPDATE authors SET state = 'ZZ' FROM (SELECT TOP 10 * FROM authors ORDER BY au_lname) AS t1 WHERE authors.au_id = t1.au_id
浥雨轻寒
2024-10-17 11:19:54
update 表 set 字段 = 内容 where 字段= 条件 如果从一个表的数据更新另一个表如下 update 表1 set 表1.字段 = 表2.字段 from 表1,表2 where 表1.sid = 表2.sid
浅墨时光
2024-10-17 12:46:48
UPDATE语句用于更新修改指定记录的数据,其用法为: UPDATE tbl_name SET col_name1=value1, col_name2=value2, … WHERE conditions 对符合条件的记录,更新修改指定字段的值。若没有WHERE条件限定,则对所有记录进行更新修改。例如: 图 4.23 更新记录 这里发不料图片,具体可以到我Blog查看
http://blog.163.com/indian
找日志中的 [原创]MySQL基础入门-05MySQL的SQL语法-最后续
爱哭的小鬼
2024-10-17 14:06:15
update <表名> set <要更新的字段=新值> [where <更新条件>]
<>里是必须的 []里是可选的
雨零
2024-10-17 12:53:54
update table_name a set a.C=(select b.C from table_name b where a.B=b.B) where a.A='2008' 声明:如果你这里只有两年的数据的话,可以这么用,如果你年份多了的话这么用是不行的,其他情况的话还得具体问题具体分析了