输入职位的编号得到它下属的职位

本文介绍了一个SQL存储过程的设计与实现,该过程用于递归查询下属职位信息。通过创建临时表并利用循环不断扩展查询范围,最终返回所有指定职位的下属职位编号及名称。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建一个表,包含三列--编号、职位名称、上级职位编号

CREATE TABLE [dbo].[Table1] (
 [ID] [smallint] IDENTITY (1, 1) NOT NULL ,
 [Name] [varchar] (40) , [SuperPosition] [smallint] NULL
)

创建存储过程

drop proc jayjay
go
create proc jayjay
 @pid int
as
DECLARE @ids VARCHAR(2000)
DECLARE @tmpids VARCHAR(2000)
DECLARE @oldids VARCHAR(2000)
DECLARE @sql nVARCHAR(2000)
set @ids=''
set @tmpids=''
set @oldids=''

SELECT @ids=@ids+CONVERT(VARCHAR,id)+','
FROM dbo.Table1
WHERE superPosition=@pid and superPosition<>ID

IF len(@ids)>0
 SET @ids=left(@ids,len(@ids)-1)

CREATE TABLE #Position(id int)
SET @oldids = @ids

while len(@oldids)>0
begin
 SET @sql=N'INSERT INTO #Position
   SELECT id
   FROM Table1
   WHERE superPosition in (' + @oldids +')'
 EXEC (@sql)
 SET @tmpids=''
 SELECT  @tmpids = @tmpids + CONVERT(VARCHAR,id) + ','
 FROM #Position
 IF LEN(@tmpids)>0
  SET @tmpids = LEFT(@tmpids,LEN(@tmpids)-1)
 SET @oldids = @tmpids
 DELETE FROM #Position
 SET @ids=@ids+','+@tmpids
end
IF LEN(@ids)>0
 BEGIN
  SET @ids = LEFT(@ids,LEN(@ids)-1)  
  SET @sql =N'SELECT ID,Name FROM Table1 WHERE ID in (' + @ids + ')'
  PRINT @sql
  EXEC(@sql)
 END
ELSE
 SELECT ID FROM CRM_PUB_Position WHERE 1=2

执行存储过程。
exec jayjay 8

下属职位编号和名称全部显示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值