sql 生成菜单列表形菜单(作为笔记记录在这里)

来源:互联网 发布:c语言中 什么意思 编辑:程序博客网 时间:2024/06/10 00:51

l给你一个例子,跟这个差不多:
CREATE TABLE T(ID INT ,PID INT)     
INSERT INTO T SELECT 1,0
UNION ALL SELECT 2,0
UNION ALL SELECT 3,1
UNION ALL SELECT 4,1
UNION ALL SELECT 5,2
UNION ALL SELECT 6,4
UNION ALL SELECT 7,3
UNION ALL SELECT 8,4
GO
--测试数据

 

CREATE FUNCTION F(@ID INT)
RETURNS VARCHAR(20)
AS
BEGIN
DECLARE @R VARCHAR(20)
SET @R=@ID
WHILE ISNULL(@ID,'')<>''
   BEGIN
    SELECT @R=CAST(PID AS VARCHAR(20))+'.'+@R FROM T WHERE ID=@ID
    SELECT @ID=PID FROM T WHERE ID=@ID
   END
RETURN @R
END
GO
--生成目录

CREATE FUNCTION F2(@F VARCHAR(20))
RETURNS VARCHAR(20)
BEGIN
DECLARE @R VARCHAR(20)
SET @R=''
SET @F=SUBSTRING(@F,4,LEN(@F))
WHILE CHARINDEX('.',@F,1)<>0
BEGIN
   SET @F=SUBSTRING(@F,CHARINDEX('.',@F,1)+1,LEN(@F))
   SET @R='-'+@R
END
RETURN @R
END
GO
--生成前缀符号


SELECT DBO.F2(DBO.F(ID))+CAST(ID AS VARCHAR) FROM T ORDER BY DBO.F(ID)
GO

--结果

DROP TABLE T
DROP FUNCTION F
DROP FUNCTION F2


----------------------------------------------------以下为结果集--------------------------------------------------------------

1
-3
--7
-4
--6
--8
2
-5

原创粉丝点击