数据表:
id parentId sortName
----------- ----------- ----------
1 0 A
2 0 B
3 1 AA
4 3 AAA
5 4 AAAA
6 2 BB
能不能通过SQl直接得到这样的结果
id Sort_Description
1 A
2 B
3 A-AA
4 A-AA-AAA
5 A-AA-AAA-AAAA
6 B-BB
--> 生成测试数据表: [tb] IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb] GO CREATE TABLE tb ( id INT, parentId INT, sortName VARCHAR(10) ) INSERT INTO tb SELECT 1, '0', 'A' UNION ALL SELECT 2, '0', 'B' UNION ALL SELECT 3, '1', 'AA' UNION ALL SELECT 4, '3', 'AAA' UNION ALL SELECT 5, '4', 'AAAA' UNION ALL SELECT 6, '2', 'BB' GO --> SQL查询如下: IF OBJECT_ID('dbo.f_str')>0 DROP FUNCTION dbo.f_str GO CREATE FUNCTION dbo.f_str ( @id INT ) RETURNS VARCHAR(1000) AS BEGIN DECLARE @parentId INT, @s VARCHAR(1000) WHILE EXISTS( SELECT 1 FROM tb WHERE id = @id ) BEGIN SELECT @s = sortname+ISNULL('-'+@s, ''), @parentId = parentid FROM tb WHERE id = @id SET @id = @parentId END RETURN @s END GO SELECT *, dbo.f_str(id) Sort_Description FROM tb /* id parentId sortName Sort_Description ----------- ----------- ---------- ---------------------------- 1 0 A A 2 0 B B 3 1 AA A-AA 4 3 AAA A-AA-AAA 5 4 AAAA A-AA-AAA-AAAA 6 2 BB B-BB (6 行受影响) */