sqlserver修改数据语句
作者:娱乐 来源:休闲 浏览: 【大 中 小】 发布时间:2026-10-17 06:21:30 评论数:
SQL Server里改数据,改数最常用的据语句就是UPDATE语句。但很多人写UPDATE时翻车,改数问题往往不在语法本身,据语句而在“忘了加WHERE”。改数
先看最基本的据语句写法:UPDATE 表名 SET 列名 = 新值 WHERE 条件
比如把编号为1001的订单金额改成500:UPDATE orders SET amount = 500 WHERE order_id = 1001
这套逻辑简单到让人放松警惕。可一旦你漏掉WHERE,改数SQL Server会毫不留情地把整张表的据语句所有行都改掉。我见过一个测试库,改数有人执行UPDATE users SET password = '123456',据语句没加条件,改数结果全公司账号都变成同一个密码——还好是据语句测试环境。生产环境出这种事,改数直接收拾东西走人。据语句
多列更新时,改数用逗号分隔,别用AND。下面这个写法是错的:UPDATE products SET price = 10 AND stock = 5 WHERE id = 3
正确写法是:UPDATE products SET price = 10, stock = 5 WHERE id = 3
很多人第一次写多列更新都会踩这个坑,报错信息还不太明显,容易让人懵半天。
再说说UPDATE和SELECT怎么配合。你经常需要根据另一张表的值来更新当前表。SQL Server支持FROM子句:UPDATE p
SET p.price = s.new_price
FROM products p
INNER JOIN price_updates s ON p.product_code = s.product_code
这种写法比逐行循环高效得多。我见过有人用游标一行行处理,跑了一个多小时,换成JOIN UPDATE后,十秒钟跑完。数据量一大,性能差距就是天壤之别。
还有种情况,你想把某列改成它自身加上一个值,比如库存增加10:UPDATE inventory SET quantity = quantity + 10 WHERE item_id = 5
这里有个细节——如果quantity本身是NULL,那结果还是NULL,不会变成10。你得先处理NULL:UPDATE inventory SET quantity = ISNULL(quantity, 0) + 10 WHERE item_id = 5
处理大量数据时,别一口气UPDATE几百万行。SQL Server会锁表,其他查询全部卡死。分批更新是常见做法:UPDATE TOP (1000) logs SET processed = 1 WHERE processed = 0
然后重复执行这个语句,直到影响行数为0。简单粗暴,但确实有效。
最后提醒一句,UPDATE之前先跑一遍SELECT确认条件。比如你要删掉某用户的所有订单,先SELECT * FROM orders WHERE user_id = 88看看是不是只有你想改的那几条。很多人跳过这步,直接写UPDATE,等发现改错时,数据已经回不去了。
SQL Server没有像MySQL那样的--safe-updates模式来强制要求WHERE,所以只能靠你自己养成习惯。改完数据后立刻执行SELECT验证结果,别以为语句执行成功就万事大吉。我见过太多人栽在这上面——语句没报错,但数据改错了,比报错更可怕。
