SQL批量更新具有树形结构表Path字段

如上图所示,需要更新该表中Path字段,如ID=14的Path值:-1,ID=17的Path值:-1.14,ID=20的Path值:-1.14.18.19

步骤1、创建函数

Create FUNCTION  [dbo].[F_Org]
(
@id int
)
RETURNS TABLE
AS
RETURN
(
with testTable
as(
select UpperID from Core_DeptInfo
where ID=@id union all
select Core_DeptInfo.UpperID from Core_DeptInfo,testTable
where Core_DeptInfo.ID=testTable .UpperID)
 select UpperID  from testTable
)

步骤2、循环执行SQL

declare @minId int
declare @maxId int
declare @result nvarchar(50)
declare @count int
select  @minId = MIN(id) from Core_DeptInfo
select  @maxId = MAX(id) from Core_DeptInfo

WHILE @maxId >=@minId
BEGIN
    select @count = COUNT(1) from Core_DeptInfo where  ID=@maxId;
    if @count=1
    begin
        select @result = (select  CONVERT(nvarchar(50),UpperID) +‘.‘  from dbo.F_Org(@maxId) order by UpperID    for xml path(‘‘)  )
        set @result = LEFT(@result,LEN(@result)-1)
        update Core_DeptInfoExtend set Path=@result where ID=@maxId
    end
    SET @maxId = @maxId -1
END 

SQL批量更新具有树形结构表Path字段

时间: 2024-08-25 22:04:02

SQL批量更新具有树形结构表Path字段的相关文章

树形结构表查询,只用一条SQL语句查询所有父级ID解决办法

在树形结构表查询中用得最多的就是查询指定分类的所有下级分类,这个性能比较好的解决方案是为分类加一个编码(路径)把父级的ID都拼接上,最后通过like 'x%'就能把所有下级分类select出来.但是有时也会遇到反过来,找出指定分类的所有上级分类,这个情况尤其在分销或类传销的系统中最常见,因为他们分成都是上级分成,所以要找出指定人的上级集合. 下面分享一下我的解决方案(只用一条SQL语句.不用存储过程.函数): 有下面所在的新闻分类表. ParentID为父级的ID. 下面要找出ID为52的所有上

Atitit.各种 数据类型 ( 树形结构,表形数据 ) 的结构与存储数据库 attilax 总结

Atitit.各种  数据类型 ( 树形结构,表形数据  ) 的结构与存储数据库 attilax  总结 1. 数据结构( 树形结构,表形数据,对象结构 ) 1 2. 编程语言中对应的数据结构 java c# php ( Dic/Map      List    datatable ) 1 3. 数据库存储数据  1 4. 数据的表形显示( 多条记录 与单条记录 ) 2 5. ASP.NET 数据控件:GridView,DataList,Repeater ,DetailsView,FormVie

sql server 查询数据库所有的表名+字段

原文:sql server 查询数据库所有的表名+字段 SELECT * FROM INFORMATION_SCHEMA.columns WHERE TABLE_NAME='Account' SELECT    (case when a.colorder=1 then d.name else '' end) as 表名,--如果表名相同就返回空       a.colorder as 字段序号,       a.name as 字段名,       (case when COLUMNPROPER

[SQL]取得数据库里的数据表、字段、型态、长度、数据结构等资讯

如果想动态做查询条件,或是撰写表单产生器,以及动态产生表单,可以利用以下语法,放到检视表里以供使用. 如果想动态做查询条件,或是撰写表单产生器,以及动态产生表单,可以利用以下语法,放到检视表里以供使用. 假设我数据库里有两个数据表分别为Departments和Employees如下: Departments 数据行名称 数据类型 长度 允许Null dno varchar 50 0 name varchar 50 0 manager varchar 50 0 budget int 4 0 Emp

「SQL归纳」树形结构表的存储与查询功能的实现——通过路径方法(非递归)

一.树形结构例子分析: 以360问答页面为例:http://wenda.so.com/c/ 我们通过观察URL,可以明确该页面的数据以树形结构存储,下面三块模块分别为: ①根节点 ②根节点的第一层子节点 ③为左侧所选择节点的下一层子节点 (图1) 该例简化的树形结构图如下: (图2) 我们不难发现,每当点击图1红框内的类别时,页面主体问题部分会显示该类别节点下所有子节点的问题.因此,需要实现查询出某节点所有子节点的功能. 二.表的存储: 需要存储两张表: 1.类别表 create table [

sqlserver 树形结构表查询 获取拼接结果

树形表结构如下 IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[Test]') AND type IN ('U')) DROP TABLE [dbo].[Test] GO CREATE TABLE [dbo].[Test] ( [Id] bigint IDENTITY(1,1) NOT NULL, [TypeName] nvarchar(50) COLLATE Chinese_PRC_CI

树形结构表的存储【转自:https://www.cnblogs.com/Tjna/p/9026980.html】

一.树形结构例子分析: 以360问答页面为例:http://wenda.so.com/c/ 我们通过观察URL,可以明确该页面的数据以树形结构存储,下面三块模块分别为: ①根节点 ②根节点的第一层子节点 ③为左侧所选择节点的下一层子节点 (图1) 该例简化的树形结构图如下: (图2) 我们不难发现,每当点击图1红框内的类别时,页面主体问题部分会显示该类别节点下所有子节点的问题.因此,需要实现查询出某节点所有子节点的功能. 二.表的存储: 需要存储两张表: 1.类别表 create table [

使用sql查询mysql/oracle/sql server/gp数据库中指定表的字段信息(字段名/字段类型/字段长度/是否是主键/是否为空)

1,根据数据库类型拼接不同URL /** * 根据类型不同拼接连接的URL * @param dbType 1:mysql.2:oracle.3:sql server.4:gp * @param ip * @param port * @param databaseName * @return*/ public static String getTestDbUrl(int dbType, String ip, String port, String databaseName){ String ur

使用postgre数据库实现树形结构表的子-父级迭代查询,通过级联菜单简单举例

前言:开发常用的关系型数据库MySQL,mssql,postgre,Oracle,简单的增删改查的SQL语句都与标准SQL兼容,这个不用讲,那么对于迭代查询(不严格的叫法:递归查询)每种数据库都不一样,对于标准SQL语句支持最好的是mssql和postgre,这个不需多讲,我们只讲讲单表情况下的postgre如何通过迭代查询获取有层级关系的数据. 一.表结构举例 MENU表 ID VARCHAR2(32)     N   sys_guid()    节点idFENXID VARCHAR2(32)