CTE的妙用
转自: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
 
CTE的妙用的更多相关文章
- 妙用CTE,一条语句实现sql递归查询,SQLServer 递归
		
数据库设计中经常碰到父子节点的关系结构,经常需要找到某个节点的根,或者某个节点的所有子节点,一般做法都是在业务层做递归的方式实现,或者数据库存储过程实现.但其实SQLServer提供的CTE可以很好的 ...
 - 【CSS进阶】伪元素的妙用--单标签之美
		
最近在研读 <CSS SECRET>(CSS揭秘)这本大作,对 CSS 有了更深层次的理解,折腾了下面这个项目: CSS3奇思妙想 -- Demo (请用 Chrome 浏览器打开,非常值 ...
 - angular2系列教程(十)两种启动方法、两个路由服务、引用类型和单例模式的妙用
		
今天我们要讲的是ng2的路由系统. 例子
 - JavaScript的妙与乐(一)之 函数优化
		
JavaScript的妙与乐系列文章主要是展示一些JavaScript上面比较好玩一点的特性和一些有用的技巧,里面很多内容都是我曾经在项目中使用过的一些内容(当然,未必所有技巧的使用频率都很高^_^) ...
 - Promise的前世今生和妙用技巧
		
浏览器事件模型和回调机制 JavaScript作为单线程运行于浏览器之中,这是每本JavaScript教科书中都会被提到的.同时出于对UI线程操作的安全性考虑,JavaScript和UI线程也处于同一 ...
 - 【CSS进阶】伪元素的妙用2 - 多列均匀布局及title属性效果
		
最近无论是工作还是自我学习提升都很忙,面对长篇大论的博文总是心有余而力不足,但又不断的接触学习到零碎的但是很有意义的知识点,很想分享给大家,所以本篇可能会很短. 本篇接我另一篇讲述 CSS 伪元素的文 ...
 - 不太被人提起的%%lockres%%的妙用
		
%%lockres%% 这个值似乎很少被大家提到,甚至微软在官方文档中. 它返回是一个Hash Value,看乎这个值没什么用. 后来在实践也有它的妙用之处,比如在出现性能问题如LOCK时,一般先通过 ...
 - sql server 公共表达式的简单应用(cte)
		
一.前言 现在做项目数据访问基本都会选择一种orm框架,它以面向对象的形式屏蔽底层的数据访问形式,让开发人员更集中在业务处理上,而不是和数据库的交互上,帮助我们提高开发效率:例如一些简单的insert ...
 - 递归 CTE
		
公用表表达式 (CTE) 具有一个重要的优点,那就是能够引用其自身,从而创建递归 CTE.递归 CTE 是一个重复执行初始 CTE 以返回数据子集直到获取完整结果集的公用表表达式. 当某个查询引用递归 ...
 
随机推荐
- js定义对象
			
1.工厂模式 function createPerson(name,age,job){ var o = {}; o.name = name; o.age = age; o.job = job; o.s ...
 - C# Asp.net 制作一个windows服务
			
那下面就来说说如何制作一个服务来 实现开机自动启动,每隔一段时间向student表中插入数据. 步骤: 1) 新建项目 ---> Windows 服务 2) 拖放Times控件 工具箱中 ...
 - 如何用MathType编辑化学等式
			
MathType在数学中应用非常广泛,被大量用于编辑数学公式,MathType不仅可以用来编辑数学公式,还可以编辑化学反应式,那么MathType编辑化学等式怎么操作的呢? 具体操作如下: 1.打开M ...
 - iOS 注冊本地通知(推送)
			
注:按Home键让App进入后台执行时.方可查看通知. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithO ...
 - linux命令之find和locate
			
1.find / -name log.xml 按照名字查找log.xml文件 2.locate log.xml 查找log.xml文件(效率高) 3.grep 'hive' word. ...
 - 如何在HTML中播放flash
			
随着html的风靡,改变了之前前端的许多条条框框,而video的出现使flash仿佛都要退出历史的舞台了,但是h5也会出现以下局限性,比如说,在一些不支持h5的浏览器上,此处省略一万只草泥马..... ...
 - c++11——std::function和bind绑定器
			
c++11中增加了std::function和std::bind,可更加方便的使用标准库,同时也可方便的进行延时求值. 可调用对象 c++中的可调用对象存在以下几类: (1)函数指针 (2)具有ope ...
 - jquery类似方法的比较(二)
			
(1)append()&appendTo()&prepend()$prependTo() (2)after()&before()&insertAfter()&i ...
 - Excel 2010 如何将筛选后的数据复制粘贴到另一个工作表筛选后的表格里
			
如果你是指自动筛选后,把筛选数据复制/粘贴到另外一个工作表中,不妨试试试 第一步选中筛选后的数据区域:第二步执行菜单命令“编辑/定位/定位条件/可见单元格”,确定:第三步单击复制按钮或者Ctrl+C或 ...
 - Excel 2010 最熟悉的陌生功能:筛选器(将当前所选内容添加到筛选器)
			
使用excel2010版的同学,在进行筛选时,肯定都对这句话很熟悉:将当前所选内容添加到筛选器.但很多同学天天看到,却不知道什么是筛选器?它有什么作用. 其实,这里所指的筛选器就是储存筛选结果的一个虚 ...