SQL Server中能否使用BETWEEN运算符删除指定范围的行?
关于使用BETWEEN运算符执行范围删除的说明
你写的范围删除语句语法是合法有效的,BETWEEN运算符本身就可以用于DELETE语句的范围条件匹配,这个逻辑对所有数据表通用,不管你是操作products表还是示例里的tbl_registration表,只要表名、字段名和你实际业务库对应即可。你给出的示例:
delete from tbl_registration where regid between 1 and 20;
和下面这种写法的执行效果完全等价:
delete from tbl_registration where regid >= 1 and regid <= 20;
只要你的业务需求确实是删除regid值在1到20区间(包含1和20两个端点值)的记录,这个写法就是正确的,相比拆成两个大小比较的写法更简洁。
使用这种方式删除需要注意几个容易出问题的点:
BETWEEN是左右全闭区间匹配,执行前一定要确认你要删除的范围是否包含两个端点值,避免出现多删数据的情况。比如如果你本来只想删regid小于20的记录,用这个写法就会误删regid=20的行。- 如果用
BETWEEN匹配时间、浮点数、字符串这类非连续/非精确整数类型的字段,很容易出现匹配偏差。比如匹配时间范围写between '2024-01-01' and '2024-01-31',会漏掉2024年1月31日0点之后的所有当日数据,不过你用在regid这类整数主键字段上一般不会有这类问题。 - 正式执行删除操作前,务必先把
DELETE替换成SELECT *执行一次,核对查询出来的结果集是不是你真正要删除的记录;有条件的话建议开启事务执行删除,确认数据删除范围正确后再提交事务,最大程度避免误删。
内容的提问来源于stack exchange,提问作者Saurabh Kumar
相关产品推荐
相关产品推荐

