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 以返回数据子集直到获取完整结果集的公用表表达式. 当某个查询引用递归 ...
随机推荐
- Spring-Resource接口
4.1.1 概述 在日常程序开发中,处理外部资源是很繁琐的事情,我们可能需要处理URL资源.File资源资源.ClassPath相关资源.服务器相关资源(JBoss AS 5.x上的VFS资源)等等很 ...
- Oracle-批量修改语句及相关知识点
问: 有两张表A和B,结构相同,数据量一致,比如都有x,y和z列且都有n行,x为主键,完全相等,如何把表B的y列的数据赋值给A的y列? 我写的是1 update A set A.y=B.y where ...
- 资深投资人全力反击: VC增值平台从来就不是一坨狗屎
编者注: 本文来自海外著名科技博客VentureBeat, 英文原文出自Kyle Lacy之手 ,中文版由天地会珠海分舵进行编译. 文章主要是针对前几天德国VC Christian Claussen的 ...
- vs2008 调试时不会命中断点,源代码与原始版本不同,解决办法
当前不会命中断点,源代码与原始版本不同,解决办法 1.应该是自己一行里写的代码太长了 格式化一下 或者 换下行 2. VC直接把整个文件格式化了一次,断点就可以用了 菜单:编辑-〉高级-〉设置选定内容 ...
- Dubbo源码导入Eclipse遇到的问题
1.怎么将Dubbo源码导入到Eclipse 方法一: 打开Eclipse,File-->Import-->maven-->Exsting Maven Projects,选择dubb ...
- php截取中文字符串时乱码问题
<?php function chinesesubstr($str,$start,$len) { //$str指字符串,$start指字符串的起始位置,$len指字符串长度 $strlen=$s ...
- 安装安全狗后,MP4无法播放
- CSS3 属性组参考资料
CSS 属性组: 动画 背景 边框和轮廓 盒(框) 颜色 内容分页媒体 定位 可伸缩框 字体 生成内容 网格 超链接 行框 列表 外边距 Marquee 多列 内边距 分页媒体 定位 打印 Ruby ...
- poj_3352 连通图的桥
题目大意 给定N个点,他们之间用一些双向边连通,使得这N个点两两相互可达.但是其中某些双向边为桥,这样若断开这些桥,则整个图就无法做到点之间两两可达.现在可以添加若干条双向边,使得断开图中的任意一条边 ...
- 【HTML】改变鼠标样式图片css
你需要一张图 .ico 的 格式 如果一开始你要解决的是怎么去用png 格式图片转成 ICO格式 先做一张32*32的PNG格式图片 然后 打开http://www.easyicon.net/co ...