最近研究ASP.NET Ajax.里的三级联动控件,发现其数据源是XMl文件。以前项目里的三级联动,像省市选择什么的数据源都是数据库。本来也想直接用数据库里已有的表,但是发现此Ajax联动控件绑定数据源的WEB服务所调用的是XML文件而且好像不能更改,无奈只能用XML文件了。用SQL语句里的关联查询只能弄出两层来,想了多种方法都未能成功。在CSDN里求助还被人臭骂了一顿,郁闷啊。关键时刻,老大挺身而出,写了一个存储过程,终于实现了。下面是代码:
1
/*
2
RetrieveXML ''
3
*/
4
Create Procedure RetrieveXML
5
(
6
@iParentCode int
7
)
8
AS
9
declare @cName varchar(50)
10
declare @iCode int
11
12
if Len(@iParentCode) = 1 Begin
13
--定义游标(省级)并给游标赋值
14
declare curProvince cursor for
15
select cName, iCode from CommonArea
16
where len(iCode)= 2
17
18
--打开游标
19
OPEN curProvince
20
21
--取出第一个结果
22
FETCH NEXT FROM curProvince
23
INTO @cName, @iCode
24
25
--循环取出游标里的结果
26
while @@FETCH_STATUS=0 Begin
27
print '<Province name="'+@cName+'">'
28
exec('RetrieveXML ''' + @iCode + '''')
29
Print '</Province>'
30
31
--移动游标取出下一个结果
32
FETCH NEXT FROM curProvince
33
INTO @cName, @iCode
34
End
35
36
close curProvince
37
DEALLOCATE curProvince
38
End
39
Else if Len(@iParentCode) = 2 Begin
40
--定义游标(市级)
41
declare curCity cursor for
42
select cName, iCode from CommonArea
43
where len(iCode)=len(@iParentCode) + 2
44
and left(iCode, len(@iParentCode)) = @iParentCode
45
46
OPEN curCity
47
48
FETCH NEXT FROM curCity
49
INTO @cName, @iCode
50
51
while @@FETCH_STATUS=0 Begin
52
print '<City name="'+@cName+'">'
53
exec('RetrieveXML ''' + @iCode + '''')
54
Print '</City>'
55
FETCH NEXT FROM curCity
56
INTO @cName, @iCode
57
End
58
59
close curCity
60
DEALLOCATE curCity
61
End
62
Else if Len(@iParentCode) = 4 Begin
63
declare curArea cursor for
64
select cName, iCode from CommonArea
65
where len(iCode)=len(@iParentCode) + 2
66
and left(iCode, len(@iParentCode)) = @iParentCode
67
68
OPEN curArea
69
70
FETCH NEXT FROM curArea
71
INTO @cName, @iCode
72
73
while @@FETCH_STATUS=0 Begin
74
print '<Area name="'+@cName+'" />'
75
76
FETCH NEXT FROM curArea
77
INTO @cName, @iCode
78
End
79
80
close curArea
81
DEALLOCATE curArea
82
End
/*2
RetrieveXML ''3
*/4
Create Procedure RetrieveXML5
(6
@iParentCode int7
)8
AS9
declare @cName varchar(50)10
declare @iCode int11

12
if Len(@iParentCode) = 1 Begin13
--定义游标(省级)并给游标赋值14
declare curProvince cursor for15
select cName, iCode from CommonArea16
where len(iCode)= 217

18
--打开游标19
OPEN curProvince20

21
--取出第一个结果22
FETCH NEXT FROM curProvince 23
INTO @cName, @iCode24

25
--循环取出游标里的结果26
while @@FETCH_STATUS=0 Begin27
print '<Province name="'+@cName+'">'28
exec('RetrieveXML ''' + @iCode + '''')29
Print '</Province>'30

31
--移动游标取出下一个结果32
FETCH NEXT FROM curProvince 33
INTO @cName, @iCode34
End35

36
close curProvince37
DEALLOCATE curProvince38
End39
Else if Len(@iParentCode) = 2 Begin40
--定义游标(市级)41
declare curCity cursor for42
select cName, iCode from CommonArea43
where len(iCode)=len(@iParentCode) + 244
and left(iCode, len(@iParentCode)) = @iParentCode45

46
OPEN curCity47

48
FETCH NEXT FROM curCity 49
INTO @cName, @iCode50

51
while @@FETCH_STATUS=0 Begin52
print '<City name="'+@cName+'">'53
exec('RetrieveXML ''' + @iCode + '''')54
Print '</City>'55
FETCH NEXT FROM curCity 56
INTO @cName, @iCode57
End58

59
close curCity60
DEALLOCATE curCity61
End62
Else if Len(@iParentCode) = 4 Begin63
declare curArea cursor for64
select cName, iCode from CommonArea65
where len(iCode)=len(@iParentCode) + 266
and left(iCode, len(@iParentCode)) = @iParentCode67

68
OPEN curArea69

70
FETCH NEXT FROM curArea 71
INTO @cName, @iCode72

73
while @@FETCH_STATUS=0 Begin74
print '<Area name="'+@cName+'" />'75

76
FETCH NEXT FROM curArea 77
INTO @cName, @iCode78
End79

80
close curArea81
DEALLOCATE curArea82
End

浙公网安备 33010602011771号