SQL 递归显示总结

--判断表是否存在
IF OBJECT_ID('T_JBFL') IS NOT NULL
BEGIN
   DROP TABLE T_JBFL;
END
GO
--创建表
CREATE TABLE [dbo].[T_JBFL](
	[ID] [int] NULL,
	[MC] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
	[PARENTID] [int] NULL,
	[BS] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
--插入测试数据
INSERT [dbo].T_JBFL  VALUES (1, N'笔记本电源', 0, N'商品分类')
GO
INSERT [dbo].T_JBFL  VALUES (2, N'供应商', 0, N'来往单位分类')
GO
INSERT [dbo].T_JBFL  VALUES (3, N'客户', 0, N'来往单位分类')
GO
INSERT [dbo].T_JBFL  VALUES (4, N'现金', 0, N'资金分类')
GO
INSERT [dbo].T_JBFL  VALUES (5, N'银行资金', 0, N'资金分类')
GO
INSERT [dbo].T_JBFL  VALUES (6, N'正常仓库', 0, N'仓库分类')
GO
INSERT [dbo].T_JBFL  VALUES (7, N'惠普电源', 1, N'商品分类')
GO
INSERT [dbo].T_JBFL  VALUES (8, N'联想电源', 1, N'商品分类')
GO
INSERT [dbo].T_JBFL  VALUES (9, N'宏基电源', 1, N'商品分类')
GO
INSERT [dbo].T_JBFL  VALUES (10, N'音响', 0, N'商品分类')
GO
INSERT [dbo].T_JBFL  VALUES (11, N'大音响', 10, N'商品分类')
GO
INSERT [dbo].T_JBFL  VALUES (12, N'小音响', 10, N'商品分类')
GO
INSERT [dbo].T_JBFL  VALUES (13, N'M10', 11, N'商品分类')
GO
INSERT [dbo].T_JBFL  VALUES (14, N'M30', 12, N'商品分类')
GO
INSERT [dbo].T_JBFL  VALUES (15, N'111', 9, N'商品分类')
GO
INSERT [dbo].T_JBFL  VALUES (16, N'222', 8, N'商品分类')
GO
INSERT [dbo].T_JBFL  VALUES (17, N'55', 16, N'商品分类')
GO
--递归方法
ALTER FUNCTION F_DG(@STRID VARCHAR(20),@PID INT)
RETURNS VARCHAR(200)
AS
BEGIN
    DECLARE @LENGHT INT --获取最大的编号长度
	DECLARE @ID INT
    SELECT @ID=PARENTID FROM T_JBFL WHERE ID=@PID
    SELECT @LENGHT=MAX(LEN(ID)) FROM T_JBFL
    IF(isnull(@ID,-1)<>-1)
    BEGIN
    	IF(@STRID='')
    	BEGIN
    		SET	@STRID=RIGHT('00000000000000000'+CAST(@ID AS VARCHAR(20)),2);
    	END
        ELSE
            SET @STRID=RIGHT('00000000000000000'+CAST(@ID AS VARCHAR(20)),2)+','+@STRID;
    END
    IF(isnull(@ID,-1)<>-1)
    BEGIN
    	RETURN dbo.F_DG(@STRID,@ID);
    END
    RETURN @STRID;
END
GO
--查询排序显示
SELECT * FROM 
(
  SELECT dbo.F_DG('',ID)+','
  +RIGHT('00000000000000000'+CAST(ID AS VARCHAR(20)),(SELECT MAX(LEN(ID)) FROM T_JBFL)
 ) AS SID,
* FROM T_JBFL ) T 
ORDER BY [SID]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值