CTE的妙用
2024-08-25 14:33:20
转自:https://blog.csdn.net/kk185800961/article/details/42535223
之前在2本书看到过with as 子句的一个简单例子,网上没找到相关资料。
今天想起总结一下,主要说明如下:
【大表分批更新】
【大表分批删除】
【完全重复的行只保留一行】
- --创建测试表
- -- DROP TABLE [tabName]
- SELECT * INTO [tabName] FROM sys.objects
- SELECT * FROM [databaseName].[dbo].[tabName] ORDER BY name desc
- ---------------------------------------------------------------
- ---------------------------------------------------------------
- 【大表分批更新】
- 网页需要升级的时候,数据库需要增加字段或者更新字段值,对于大表将堵塞很久。
- 一般先增加字段允许为null值,再更新表中默认值,再添加约束
- 比如要将测试表的principal_id更新为0,以下用最简单的可行的方法更新:
- ;WITH TAB AS(
- SELECT TOP 10 principal_id FROM [dbo].[tabName] where principal_id is null
- )update TAB set principal_id = 0
- 要更新字段principal_id就只取一个。每次选择前10行更新null为0,可以创建定时作业更新。
- ---------------------------------------------------------------
- ---------------------------------------------------------------
- 【大表分批删除】
- 对于一些数据维护需要删除较多的数据,而表较大并且很多用户还在使用中。
- 一般创建一个作业在晚上执行删除,或者按某个字段分段删除。
- 更方便的方法也可以选择符合的条件删除前N行
- ;WITH TAB AS(
- SELECT TOP 10 principal_id FROM [dbo].[tabName] where principal_id is null
- )DELETE FROM TAB
- ---------------------------------------------------------------
- ---------------------------------------------------------------
- 【完全重复的行只保留一行】
- --插入使产生重复行
- INSERT INTO [tabName]
- SELECT TOP 50 PERCENT * FROM [databaseName].[dbo].[tabName]
- SELECT * FROM [databaseName].[dbo].[tabName] ORDER BY name desc
- 网上使用最多的案例,都指定某列肯定是唯一的,以此来用一个语句删除其他重复的。
- 对于完全相同的行,大都表示创建一个临时表来过渡操作。
- 以下使用“with 子句 和 ROW_NUMBER()函数”来实现删除完全重复的其他行
- ,partition分组时可以选择一列(或所有列)进行分组排序
- ;WITH TAB AS(
- SELECT ROW_NUMBER()over(partition by object_id order by (select 0)) id
- FROM [dbo].[tabName]
- )DELETE FROM TAB WHERE ID>1
最新文章
- iOS 字符串删除 DOM
- HTML5属性--(capture=";camera";) 上传照片或者打开手机相机
- Boost学习笔记(六) progress_display注意事项
- JPEG文件格式介绍
- [Effective JavaScript 笔记]第40条:避免继承标准类
- svn提交代码的原则
- LINQ学习之旅(六)
- sql字符串查找大小写敏感相关
- 虚拟机Linux系统中安装SYNOPSYS工具图解教程
- sql相关操作
- python/数据库操作补充—模板—Session
- 注册MongoDB为系统服务(二)
- 10 种保护 Spring Boot 应用的绝佳方法
- Collections斗地主案例
- 059 SparkStream介绍
- 在datasnap 中使用unidac 访问数据(服务器端)
- LeetCode 22 Generate Parentheses(找到所有匹配的括号组合)
- 使用PHP生成和获取XML格式数据
- JS 获取各个偶数之和!!
- 【转发】Linux中设置服务自启动的三种方式
热门文章
- Webpack vs Gulp(转载)
- zookeeper 系列文章
- mybatis由浅入深day01_4入门程序_4.6根据用户id(主键)查询用户信息
- swift - UISegmentedControl 和 UIWebView 的用法
- isdigit()
- 浅谈 SSD,eMMC,UFS(转自知乎)
- express——crud
- 当div没有设置宽度,使用width的fit-content和margin:auto实现元素的水平居中
- Windows下Mysql主从配置(Mysql5.5)
- Servlet MVC 项目实战实例