摘要:前一篇文章中已经可以取得所有部门的全称,但现在又有个新的需求: 只想得到某一个部门的部门全称,虽然可以用where条件来过滤,但是会有点小浪费。 这时我们可以从后往前找,先看下效果:最后一条就是,行得通! 但是怎么取出来呢? 用ParentUnitID排序? 但是实际生活中,部门可能调整或归并,并不总是 UnitID > ParentUnitID. 所以需要一个类似于 标识列的参照物: 1 Declare @utid int 2 Set @utid = 10 -- the target unit 3 ; 4 With CTE_Unit_Name_Special --... 阅读全文
posted @ 2014-01-11 22:38 goto13 阅读(745) 评论(1) 推荐(1) 编辑
摘要:在CTE递归测试,也就是部门名称拼接的时候,遇到了小问题:登时就迷糊了:不都是取的是Unit表中的同一个列,相加之后类型就变了么?难道是因为,系统知道这是在进行递归运算,但又不确定递归的层次,以及字符串连接后的长度,于是把这个字符串的长度预设为很大很大的。但是第一个例子中的Level也进行了运算,为什么就不需要显示转换类型?这是因为递归也不是无限递归的,也是有层次限制的:【在测试递归查询的结果时,可以通过在 INSERT、UPDATE、DELETE 或 SELECT 语句的 OPTION 子句中使用 MAXRECURSION 提示和 0 到 32,767 之间的值,来限制特定语句允许的递归级数 阅读全文
posted @ 2014-01-11 22:05 goto13 阅读(5937) 评论(1) 推荐(0) 编辑
摘要:昨天在整理JS的Function时,示例是一个递归函数。说起递归,想起前段时间在搞CTE,那个纠结呀,看似容易,可我总抓不住门道,什么递归条件,什么结束条件,一头雾水。。。今天一大早就爬起来,果然不负有心人,顺利地完成,废话不多说。场景: 有一个部门表:部门ID,部门名称,父部门ID,部门层次,需要显示部门的全名称(一级部门和二级部门直接显示,其余的格式:父部门名称+/本部门名称)先做个测试,递归实现部门层次 1 -- To implement a Recursion using CTE 2 ; -- Separate to other sentence 3 With CTE_Unit_... 阅读全文
posted @ 2014-01-11 21:49 goto13 阅读(652) 评论(1) 推荐(1) 编辑