--判断表是否存在
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]