表结构如下:
AreaId ParentId AreaName Path
-------------------------------------------------------------
1 0 区域1 /1
2 1 区域11 /1/2
3 1 区域12 /1/3
4 3 区域121 /1/2/4
5 0 区域2 /5
6 5 区域21 /5/6
7 5 区域22 /5/7
8 5 区域23 /5/8
现在想让Path自动计算自己所在的路径,如上所示,Path的表达式该怎么写?
--创建该函数用在表达式中
CREATE FUNCTION F_PidPath(@PARENTID VARCHAR(10))
RETURNS VARCHAR(50)
AS
BEGIN
DECLARE @PATH VARCHAR(50)
SELECT @PATH=PATH FROM TB WHERE AREAID=@PARENTID
RETURN ISNULL(@PATH,'')
END
GO
--创建表
IF NOT OBJECT_ID('TB') IS NULL DROP TABLE TB
GO
CREATE TABLE [dbo].[TB] (
[AREAID] [nvarchar] (10),
[PARENTID] [nvarchar] (10),
[AREANAME] [nvarchar] (5),
[PATH] AS ([DBO].[F_PidPath]([PARENTID]) + '/' + [AREAID]) ---注意写法
) ON [PRIMARY]
GO
--测试数据
INSERT TB
SELECT 1,0,N'区域1' UNION ALL
SELECT 2,1,N'区域11' UNION ALL
SELECT 3,1,N'区域12' UNION ALL
SELECT 4,3,N'区域121' UNION ALL
SELECT 5,0,N'区域2' UNION ALL
SELECT 6,5,N'区域21' UNION ALL
SELECT 7,5,N'区域22' UNION ALL
SELECT 8,5,N'区域23'
GO
SELECT * FROM TB
/*
AREAID PARENTID AREANAME PATH
---------- ---------- -------- -------------------------------------------------------------
1 0 区域1 /1
2 1 区域11 /1/2
3 1 区域12 /1/3
4 3 区域121 /1/3/4
5 0 区域2 /5
6 5 区域21 /5/6
7 5 区域22 /5/7
8 5 区域23 /5/8
(所影响的行数为 8 行)
*/