关闭

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

标签: tablesqlinsertcrmnulldelete
632人阅读 评论(0) 收藏 举报
分类:

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

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

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:116198次
    • 积分:1884
    • 等级:
    • 排名:千里之外
    • 原创:68篇
    • 转载:28篇
    • 译文:0篇
    • 评论:8条
    最新评论
    计算机