sql server 树状结构表中,获取指定节点的所有父节点路径

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介: CREATE PROCEDURE [dbo].[A_P_GetParentIds] ( @IdValue NVARCHAR(36) ,-- 子节点值 @tableName NVARCHAR(MAX) ,-- 表名 @ParentIdColumnName NVARCHAR(MAX) ,-- 父节点列名 @ChildIdColumnName
CREATE PROCEDURE [dbo].[A_P_GetParentIds]
    (
      @IdValue NVARCHAR(36) ,-- 子节点值
      @tableName NVARCHAR(MAX) ,-- 表名
      @ParentIdColumnName NVARCHAR(MAX) ,-- 父节点列名
      @ChildIdColumnName NVARCHAR(MAX)-- 子节点列名
	)
AS
    DECLARE @sqlTemp NVARCHAR(MAX); --查询sql
    SET @sqlTemp = ' with cte_root as
(
 select ' + @ParentIdColumnName + ' from ' + @tableName + ' where '
        + @ChildIdColumnName + ' = ''' + @IdValue + ''' union all
  select a.' + @ParentIdColumnName + ' from ' + @tableName
        + ' a inner join cte_root b on a.' + @ChildIdColumnName + '=b.'
        + @ParentIdColumnName + ' ) ' + CHAR(10) + 'select * from cte_root '; 

------返回查询结果-----
    EXEC sp_executesql @sqlTemp;


GO


CREATE PROCEDURE [dbo].[A_P_GetParentInfo]
    (
      @IdValue NVARCHAR(36) ,-- 子节点值
      @tableName NVARCHAR(MAX) ,-- 表名
      @ParentIdColumnName NVARCHAR(MAX) ,-- 父节点列名
      @ChildIdColumnName NVARCHAR(MAX)-- 子节点列名
	)
AS
    DECLARE @sqlTemp NVARCHAR(MAX); --查询sql
    SET @sqlTemp = ' with cte_root as
(
 select *  from ' + @tableName + ' where '
        + @ChildIdColumnName + ' = ''' + @IdValue + ''' union all
  select a.*  from ' + @tableName
        + ' a inner join cte_root b on a.' + @ChildIdColumnName + '=b.'
        + @ParentIdColumnName + ' ) ' + CHAR(10) + 'select * from cte_root '; 

------返回查询结果-----
    EXEC sp_executesql @sqlTemp;

GO


调用测试:

DECLARE	@return_value int

EXEC	@return_value = [dbo].[A_P_GetParentIds]
		@IdValue = N'a29672f9-3d03-4cfc-9cb0-403ce729db5b',--子节点值
		@tableName = N'SystemMenu',--表名
		@ParentIdColumnName = N'ParentId',--父节点列名
		@ChildIdColumnName = N'Id'--子节点列名

SELECT	'Return Value' = @return_value

GO



相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
8月前
leetcode-SQL-608. 树节点
leetcode-SQL-608. 树节点
45 0
|
5月前
|
SQL 存储
访问者模式问题之在处理 SQL 语句时, IdExpression 和 LiteralExpression 节点如何忽略
访问者模式问题之在处理 SQL 语句时, IdExpression 和 LiteralExpression 节点如何忽略
|
6月前
|
SQL 关系型数据库 数据处理
SQL结构
【7月更文挑战第28天】SQL结构
34 4
|
5月前
|
SQL 安全 Java
访问者模式问题之在上面的 SQL 结构定义中, sealed 接口的作用如何理解
访问者模式问题之在上面的 SQL 结构定义中, sealed 接口的作用如何理解
|
5月前
|
SQL
访问者模式问题之构造一个包含 select、from 和 where 子句的 SQL 节点树,如何解决
访问者模式问题之构造一个包含 select、from 和 where 子句的 SQL 节点树,如何解决
|
7月前
|
SQL 分布式计算 DataWorks
DataWorks产品使用合集之在使用ODPSSQL节点进行SQL任务开发时,如何执行大量的SQL语句
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
108 4
|
7月前
|
SQL 关系型数据库 MySQL
mysqldiff - Golang 针对 MySQL 数据库表结构的差异 SQL 工具
Golang 针对 MySQL 数据库表结构的差异 SQL 工具。https://github.com/camry/mysqldiff
105 7
|
7月前
|
SQL 分布式计算 DataWorks
DataWorks产品使用合集之赋值节点能否支持CDH sql
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
34 0
|
7月前
|
SQL 数据采集 DataWorks
DataWorks产品使用合集之如何创建Holo SQL节点
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
48 0
|
8月前
|
SQL 存储 算法
【数据库SQL server】数据库系统概述与DBS结构
【数据库SQL server】数据库系统概述与DBS结构
200 0
【数据库SQL server】数据库系统概述与DBS结构