记一次SqlServer骚操作——递归

目录

  • 记一次SqlServer骚操作——递归

    • 创建一个测试表,并灌入一些数据
    • 兼容MSSQL2008以下的版本
      • 正向查找
      • 反向查找
    • MSSQL2008以后的版本
      • 正向查找
      • 反向查找

记一次SqlServer骚操作——递归

? 最进需要用到sql递归更新数据的问题,因为需要兼容Sql Server 2000的语法,所以在Sql Server2008前后有两种不同的写法,这里简单记录一下。

创建一个测试表,并灌入一些数据

CREATE TABLE Test
(
    Id INT,
    PId int
)

INSERT INTO Test VALUES(1,null)
INSERT INTO Test VALUES(2,1)
INSERT INTO Test VALUES(3,2)
INSERT INTO Test VALUES(4,3)
-- 1<<2<<3<<4

兼容MSSQL2008以下的版本

正向查找

--首先我们将需要递归查到的元素写入#temp临时表
SELECT Id INTO #temp FROM Test WHERE Id=1
WHILE @@ROWCOUNT > 0
BEGIN
--查找子后写入临时表,并排除已经在临时表中的Id
    INSERT INTO #temp SELECT Id FROM Test WHERE PId IN (SELECT Id FROM #temp) AND Id NOT IN (SELECT Id FROM #temp)
END
SELECT * FROM #temp

反向查找

SELECT Id,PId INTO #temp FROM Test  WHERE Id=4
WHILE @@ROWCOUNT > 0
BEGIN
    INSERT INTO #temp SELECT Id,PId FROM Test WHERE Id IN (SELECT PId FROM #temp) AND Id NOT IN (SELECT Id FROM #temp)
END
SELECT * FROM #temp 

MSSQL2008以后的版本

正向查找

WITH #temp AS
(
--首先我们将需要递归查到的元素写入#temp临时表
    SELECT Id FROM Test WHERE Id=1
    UNION ALL
--查找子后写入临时表,并排除已经在临时表中的Id
    SELECT a.Id FROM Test a
    INNER JOIN #temp b ON a.PId= b.Id
)
SELECT * FROM #temp

反向查找

WITH #temp AS
(
    SELECT Id,PId FROM Test WHERE Id=4
    UNION ALL
    SELECT a.Id,a.Pid FROM Test a
    INNER JOIN #temp b ON a.Id= b.PId
)
SELECT * FROM #temp

原文地址:https://www.cnblogs.com/guodf/p/9846030.html

时间: 2024-08-01 07:01:15

记一次SqlServer骚操作——递归的相关文章

网易视频云技术分享:记一次.gitignore的操作细节

网易视频云是网易倾力打造的一款基于云计算的分布式多媒体处理集群和专业音视频技术,提供稳定流畅.低时延.高并发的视频直播.录制.存储.转码及点播等音视频的PAAS服务,在线教育.远程医疗.娱乐秀场.在线金融等各行业及企业用户只需经过简单的开发即可打造在线音视频平台.现在,网易视频云的技术专家给大家分享一则技术文:记一次.gitignore的操作细节. "作为一个刚上路的新手司机,git操作当然要远离各种炫酷的git GUI,因为这些GUI容易使你忽略git本身的工作流程,走向万劫不复的深渊.&qu

如何在命令长度受限的情况下成功get到webshell(函数参数受限突破、mysql的骚操作)

0x01 问题提出 还记得上篇文章记一次拿webshell踩过的坑(如何用PHP编写一个不包含数字和字母的后门),我们讲到了一些PHP的一些如何巧妙地绕过数字和字母受限的技巧,今天我要给大家分享的是如何在命令长度受限的情况下成功get到webshell,以及关于函数参数受限的突破,mysql的一些骚操作技巧~~~ 0x02 问题分析 我们先看个例子: <?php $param = $_REGUEST['param']; if(strlen($param) < 17){ eval($param)

位运算的骚操作

位运算的骚操作(一)之四则运算 ? 可以这样说,位运算是我们刚开始学计算机就会接触到的一种东西.那么位运算这么常见,我们是否可以使用它来做一些骚操作呢? 使用的运算符包括下面(java还有一个>>>无符号右移): 含义 运算符 例子 左移(后面补0) << 0011 => 0110 右移(正数前面补0,负数补1) >> 0110 => 0011 按位或 ︳ 0011 ------- => 1011 1011 按位与 & 0011 ----

spring boot 自动装配的实现原理和骚操作,不同版本实现细节调整,debug 到裂开......

开篇说明: 注解本身并没有什么实际的功能(非要说标记也是一个“实际”的功能的话,也可以算吧),隐藏在背后的注解处理器才是实现注解机制的核心.本篇将从这两个层面出发探索 spring boot 自动装配的秘密,并使用 spring boot 的自动装配机制来实现自动装配. 本次代码已经放到 github:https://github.com/christmad/code-share/tree/master/spring-boot-config-practice 代码中主要是做了 @Configur

各种骚操作线段树

线段树是世界上最美的数据结构(主要记录一些有意义的线段树.....特别是骚操作 1.uestc1425 Another LCIS  http://acm.uestc.edu.cn/#/problem/show/360 题意:两种操作 对于一段区间的数加上c 查询最长连续上升序列 题解:彻底弄清楚区间更新lazy的含义 就是切水题 直接区间更新然后区间合并用点小技巧即可 #include <iostream> #include <algorithm> #include <cst

于南邮平台游荡关于宽字节注入——骚操作

脚本名:unmagicquotes.py 作用:宽字符绕过 GPC addslashes12345 Example:* Input: 1′ AND 1=1* Output: 1%bf%27 AND 1=1–%20 今天早上在南邮平台游荡的时候,做了一题关于宽字节注入的题目,虽然宽字节注入属于很常见的题目 但是,大多数人使用的都是手工注入,我作为一个小萌新(手工注入太难了QAQ) 今天get到一个新的骚操作: 题目分析: . 首先:进行简单的手工注入操作: 可以看出这个属于典型的宽字节注入:关于宽

闪电侠 Netty 小册里的骚操作

前言 即使这是一本小册,但基于"不提笔不读书"的理念,仍然有必要总结一下.此小册对于那些"硬杠 Netty 源码 却不曾在千万级生产环境上使用实操"的用户非常有用.当然,对那些没有 Netty 编程经验的人来说,更为有用. 放个小册地址:[Netty 入门与实战:仿写微信 IM 即时通讯系统](https://juejin.im/book/5b4bc28bf265da0f60130116) 再次强烈推荐,一碗黄焖鸡/半杯 Luckin coffee/一包炫赫门 的价

There is no getter for property named &#39;XXX&#39; in class &#39;aaa.bbb.ccc&#39;(终极骚操作的解决方法)

使用SpringBoot整合Mybatis时,遇到了像标题的异常,博主当时是用Bean类对象作为参数的,所以百度了很久都没有建设性答案.贴一下报错的xxxDao文件和xxxMapper.xml文件: package com.cjs.dao; import com.cjs.bean.User; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.ut

Typescript骚操作,在TS里面直接插入HTML

Typescript骚操作,在TS里面直接插入HTML,还有语法提示 先给大家看一个图 因为我不喜欢用很重的框架,主要是并非专业UI,但是偶尔会用到,还是觉得直接element组装受不了,想想能在ts文件里面能直接插入html就好了. 插进去不难,可是苦于没有语法提示,大家看上面这个图,语法提示的问题已经解决了. 下面我来详细讲解一下这个骚操作 一.安装vscode,别的工具我没研究,大差不差 二.安装插件 是由这个插件提供的语法高亮 三.添加两个函数 export function raw(a