转自:https://blog.csdn.net/kk185800961/article/details/42535223

之前在2本书看到过with as 子句的一个简单例子,网上没找到相关资料。

今天想起总结一下,主要说明如下:

【大表分批更新】

【大表分批删除】

【完全重复的行只保留一行】

  1. --创建测试表
  2. --  DROP TABLE [tabName]
  3. SELECT * INTO [tabName] FROM sys.objects
  4. SELECT * FROM [databaseName].[dbo].[tabName] ORDER BY name desc

    1. ---------------------------------------------------------------
    2. ---------------------------------------------------------------
    3. 【大表分批更新】
    4. 网页需要升级的时候,数据库需要增加字段或者更新字段值,对于大表将堵塞很久。
    5. 一般先增加字段允许为null值,再更新表中默认值,再添加约束
    6. 比如要将测试表的principal_id更新为0,以下用最简单的可行的方法更新:
    7. ;WITH TAB AS(
    8. SELECT TOP 10 principal_id FROM [dbo].[tabName] where principal_id is null
    9. )update TAB set principal_id = 0
    10. 要更新字段principal_id就只取一个。每次选择前10行更新null为0,可以创建定时作业更新。
    11. ---------------------------------------------------------------
    12. ---------------------------------------------------------------
    13. 【大表分批删除】
    14. 对于一些数据维护需要删除较多的数据,而表较大并且很多用户还在使用中。
    15. 一般创建一个作业在晚上执行删除,或者按某个字段分段删除。
    16. 更方便的方法也可以选择符合的条件删除前N行
    17. ;WITH TAB AS(
    18. SELECT TOP 10 principal_id FROM [dbo].[tabName] where principal_id is null
    19. )DELETE FROM TAB
    20. ---------------------------------------------------------------
    21. ---------------------------------------------------------------
    22. 【完全重复的行只保留一行】
    23. --插入使产生重复行
    24. INSERT INTO [tabName]
    25. SELECT TOP 50 PERCENT * FROM [databaseName].[dbo].[tabName]
    26. SELECT * FROM [databaseName].[dbo].[tabName] ORDER BY name desc
    27. 网上使用最多的案例,都指定某列肯定是唯一的,以此来用一个语句删除其他重复的。
    28. 对于完全相同的行,大都表示创建一个临时表来过渡操作。
    29. 以下使用“with 子句 和 ROW_NUMBER()函数”来实现删除完全重复的其他行
    30. ,partition分组时可以选择一列(或所有列)进行分组排序
    31. ;WITH TAB AS(
    32. SELECT ROW_NUMBER()over(partition by object_id order by (select 0)) id
    33. FROM [dbo].[tabName]
    34. )DELETE FROM TAB WHERE ID>1

CTE的妙用的更多相关文章

  1. 妙用CTE,一条语句实现sql递归查询,SQLServer 递归

    数据库设计中经常碰到父子节点的关系结构,经常需要找到某个节点的根,或者某个节点的所有子节点,一般做法都是在业务层做递归的方式实现,或者数据库存储过程实现.但其实SQLServer提供的CTE可以很好的 ...

  2. 【CSS进阶】伪元素的妙用--单标签之美

    最近在研读 <CSS SECRET>(CSS揭秘)这本大作,对 CSS 有了更深层次的理解,折腾了下面这个项目: CSS3奇思妙想 -- Demo (请用 Chrome 浏览器打开,非常值 ...

  3. angular2系列教程(十)两种启动方法、两个路由服务、引用类型和单例模式的妙用

    今天我们要讲的是ng2的路由系统. 例子

  4. JavaScript的妙与乐(一)之 函数优化

    JavaScript的妙与乐系列文章主要是展示一些JavaScript上面比较好玩一点的特性和一些有用的技巧,里面很多内容都是我曾经在项目中使用过的一些内容(当然,未必所有技巧的使用频率都很高^_^) ...

  5. Promise的前世今生和妙用技巧

    浏览器事件模型和回调机制 JavaScript作为单线程运行于浏览器之中,这是每本JavaScript教科书中都会被提到的.同时出于对UI线程操作的安全性考虑,JavaScript和UI线程也处于同一 ...

  6. 【CSS进阶】伪元素的妙用2 - 多列均匀布局及title属性效果

    最近无论是工作还是自我学习提升都很忙,面对长篇大论的博文总是心有余而力不足,但又不断的接触学习到零碎的但是很有意义的知识点,很想分享给大家,所以本篇可能会很短. 本篇接我另一篇讲述 CSS 伪元素的文 ...

  7. 不太被人提起的%%lockres%%的妙用

    %%lockres%% 这个值似乎很少被大家提到,甚至微软在官方文档中. 它返回是一个Hash Value,看乎这个值没什么用. 后来在实践也有它的妙用之处,比如在出现性能问题如LOCK时,一般先通过 ...

  8. sql server 公共表达式的简单应用(cte)

    一.前言 现在做项目数据访问基本都会选择一种orm框架,它以面向对象的形式屏蔽底层的数据访问形式,让开发人员更集中在业务处理上,而不是和数据库的交互上,帮助我们提高开发效率:例如一些简单的insert ...

  9. 递归 CTE

    公用表表达式 (CTE) 具有一个重要的优点,那就是能够引用其自身,从而创建递归 CTE.递归 CTE 是一个重复执行初始 CTE 以返回数据子集直到获取完整结果集的公用表表达式. 当某个查询引用递归 ...

随机推荐

  1. 将Excel中读取的科学计数法表示的Double数据转换为对应的字符串

    已在SegmentFault提问,目前没有答案,自行实现如下: private static String getRealNumOfScientificNotation(String doubleSt ...

  2. LaTeX公式

    在学习机器学习中会接触到大量的数学公式,所以在写博客是会非常的麻烦.用公式编辑器一个一个写会非常的麻烦,这时候我们可以使用LaTeX来插入公式. 写这篇博文的目的在于,大家如果要编辑一些简单的公式,就 ...

  3. MFC ADO数据库操作

    MFC ADO数据库操作 - 延陵小明 - CSDN博客 http://blog.csdn.net/guoming0000/article/details/7280070/ 内容比较乱,作为草稿,对现 ...

  4. 超全面的JavaWeb笔记day09<Servlet&GenericServlet&HttpServlet&ServletContext>

    1.Servlet概述 2.Servlet接口 3.GenericServlet 4.HttpServlet 5.Servlet细节 6.ServletContext(重要) Servlet概述 生命 ...

  5. ios 显示代码块(show the code snippet library)

    在项目的实际开发中,我们会重复的书写很多的代码,我经常是需要用到某一个功能,就从以前的项目中复制粘贴过来,很是麻烦 下面就为大家提供两种不错的方法, 一.宏定义,这个大家应该很熟悉,在这里就不做多的介 ...

  6. git 清空所有commit记录方法

    说明:例如将代码提交到git仓库,将一些敏感信息提交,所以需要删除提交记录以彻底清除提交信息,以得到一个干净的仓库且代码不变 1.Checkout git checkout --orphan late ...

  7. C语言各种存储模式的区别?最常用的存储模式有哪些?

    DOS用一种段地址结构来编址计算机的内存,每一个物理内存位置都有一个可通过段地址一偏移量的方式来访问的相关地址.为了支持这种段地址结构,大多数C编译程序都允许你用以下6种存储模式来创建程序: ---- ...

  8. UITextView 实现placeholder的方法

    本文转载至 http://www.cnblogs.com/easonoutlook/archive/2012/12/28/2837665.html 在UITextField中自带placeholder ...

  9. intellij idea 2018注册码|intellij idea 2018破解文件下载(附破解教程/汉化包)

    intellij idea 2018破解文件http://www.3322.cc/soft/37661.html intellij idea 2018注册码是一款针对“intellij idea 20 ...

  10. c++字符指针

    对于C/C++中的 字符指针和字符数组,总是在碰到的时候无法确定而不得不现场测试,来确定末尾是否包含'\0',函数到底如何使用等等.真是劳民伤财,现在总结一下: 字符指针的赋值 (1)指向一个字符串常 ...