new starting point new beginning
学习、合作、共赢
最近研究ASP.NET Ajax.里的三级联动控件,发现其数据源是XMl文件。以前项目里的三级联动,像省市选择什么的数据源都是数据库。本来也想直接用数据库里已有的表,但是发现此Ajax联动控件绑定数据源的WEB服务所调用的是XML文件而且好像不能更改,无奈只能用XML文件了。用SQL语句里的关联查询只能弄出两层来,想了多种方法都未能成功。在CSDN里求助还被人臭骂了一顿,郁闷啊。关键时刻,老大挺身而出,写了一个存储过程,终于实现了。下面是代码:
 1/*
 2RetrieveXML ''
 3*/

 4Create Procedure RetrieveXML
 5(
 6    @iParentCode int
 7)
 8AS
 9declare @cName varchar(50)
10declare @iCode    int
11
12if 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
38End
39Else 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
61End
62Else 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
82End
posted on 2006-12-26 13:36  xpengfee  阅读(669)  评论(0)    收藏  举报