提取类别链
表结构:
PCID,CategoryName,ParentID
1 衬衫 0
2 裤子 0
3 长袖衬衫 1
1
set ANSI_NULLS ON
2
set QUOTED_IDENTIFIER ON
3
go
4
5
/* 创建:***
6
* 时间:200*/0*/16
7
* 用途:获取从根结点到叶结点的类别链条
8
*/
9
CREATE PROCEDURE [dbo].[GetCategorys]
10
AS
11
DECLARE
12
@CACHE_PCID int, --缓存PCID
13
@OUT_STR nvarchar(500), --输出的类别链条
14
@CACHE_PARENTID int, --缓存的父类别ID
15
@CACHE_CATENAME nvarchar(20) --缓存的类别名字
16
BEGIN
17
--获取所有独立叶结点类别
18
---------------------------------------------------------------------------
19
DECLARE ENDPOINT_CURSOR CURSOR FOR
20
select C.PCID from
21
(
22
select distinct PCID from w_ProductCategorys
23
) C
24
left outer join
25
(
26
--#PID带子类别的类别
27
select distinct B.ParentID from
28
(
29
select PCID,ParentID from w_ProductCategorys
30
) A
31
right outer join
32
(
33
select PCID,ParentID from w_ProductCategorys
34
) B
35
on A.PCID=B.ParentID where A.PCID is not null
36
--#PID
37
) D
38
on C.PCID=D.ParentID where D.ParentID is null
39
---------------------------------------------------------------------------
40
--临时表
41
SELECT PCID,ParentID,CategoryName INTO #Temp_TAB FROM w_ProductCategorys
42
--打开游标
43
OPEN ENDPOINT_CURSOR;
44
45
FETCH NEXT FROM ENDPOINT_CURSOR INTO @CACHE_PCID;
46
--游标循环
47
WHILE @@FETCH_STATUS=0
48
BEGIN
49
--循环分析PCID、ParentID,获取类别链条
50
--获取父类别
51
SET @CACHE_PARENTID=(SELECT ParentID FROM #Temp_TAB);
52
--获取叶结点类别名
53
SET @OUT_STR=(SELECT CategoryName FROM #Temp_TAB WHERE PCID=@CACHE_PCID);
54
--开始循环
55
WHILE @CACHE_PARENTID!=0
56
BEGIN
57
SET @CACHE_CATENAME=(SELECT CategoryName From #Temp_TAB WHERE PCID=@CACHE_PARENTID);
58
SET @OUT_STR=@CACHE_CATENAME+'----'+@OUT_STR;
59
SET @CACHE_PARENTID=(SELECT ParentID FROM #Temp_TAB WHERE PCID=@CACHE_PARENTID);
60
END
61
62
PRINT(@OUT_STR);
63
SET @OUT_STR='';
64
65
FETCH NEXT FROM ENDPOINT_CURSOR INTO @CACHE_PCID;
66
END
67
--关闭游标
68
CLOSE ENDPOINT_CURSOR;
69
DEALLOCATE ENDPOINT_CURSOR

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70END