请教高手 有关公交换乘的存储过程,急!谢谢
USE [mybus]GO
/****** Object: StoredProcedure [dbo].[sel_s_site] Script Date: 04/25/2013 20:14:53 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[sel_s_site]
@begin varchar(50),
@end varchar(50)
as
set nocount on
declare @l int
--正向搜索线路
set @l=0
--把数据插入临时表
select liname,Line=cast(''+rtrim(liname)
+': '+rtrim(sitename) as varchar(4000))
,sitename,number=number+1,level=@l,gid=1
into #t from sili where sitename=@begin
while @@rowcount>0 and not exists(select * from
#t where sitename = @end)
begin
set @l=@l+1
--把数据插入临时表
insert #t(Line,liname,sitename,number,level,gid)
select
Line=a.Line+case
when a.liname=b.liname
then '->'+rtrim(b.sitename)
else ' => '+rtrim(b.liname)+': '+rtrim(b.sitename)
end,
liname=b.liname,sitename=b.sitename,number=b.number+1,
@l,
case when a.liname=b.liname then a.gid else
a.gid+1 end
from #t a,sili b
where a.level=@l-1
and(
a.liname=b.liname and a.number=b.number
or
a.sitename=b.sitename and a.liname<>b.liname)
continue
end
-- 如果正向思索存在线路,则选择出来
if exists(select 起点站=@begin
,终点站=@end
,转车次数=gid
,经过站数=case when gid<3 then @l else @l-gid+2
end
,乘车线路=Line
from #t where level=@l and sitename = @end)
begin
select 起点站=@begin
,终点站=@end
,转车次数=gid
,经过站数=case when gid<3 then @l else @l-gid+2
end
,乘车线路=Line
from #t where level=@l and sitename = @end
end
--如果正向搜索不存在线路,则反向搜索
if not exists(select 起点站=@begin
,终点站=@end
,转车次数=gid
,经过站数=case when gid<3 then @l else @l-gid+2
end
,乘车线路=Line
from #t where level=@l and sitename = @end)
begin
--反向搜索线路向搜索线路
set nocount on
set @l=0
select liname,Line=cast(''+rtrim(liname)
+': '+rtrim(sitename) as varchar(4000))
,sitename,number=number-1,level=@l,gid=1
into #m from sili where sitename=@begin
while @@rowcount>0 and not exists(select * from
#m where sitename = @end)
begin
set @l=@l+1
insert #m(Line,liname,sitename,number,level,gid)
select
Line=a.Line+case
when a.liname=b.liname
then '->'+rtrim(b.sitename)
else ' => '+rtrim(b.liname)+': '+rtrim(b.sitename)
end,
liname=b.liname,sitename=b.sitename,number=b.number-1,
@l,
case when a.liname=b.liname then a.gid else
a.gid+1 end
from #m a,sili b
where a.level=@l-1
and(
a.liname=b.liname and a.number=b.number
or
a.sitename=b.sitename and a.liname<>b.liname)
continue
end
select 起点站=@begin
,终点站=@end
,转车次数=gid
,经过站数=case when gid<3 then @l else @l-gid+2
end
,乘车线路=Line+')'
from #m where level=@l and sitename=@end
-- 从正反两面判断是否存在路线,如果不存在,则提示!
if not exists(select 起点站=@begin
,终点站=@end
,转车次数=gid
,经过站数=case when gid<3 then @l else @l-gid+2
end
,乘车线路=Line+')'
from #t where level=@l and sitename=@end)
and
not exists(select 起点站=@begin
,终点站=@end
,转车次数=gid
,经过站数=case when gid<3 then @l else @l-gid+2
end
,乘车线路=Line+')'
from #m where level=@l and sitename=@end)
-- print '没有符合条件的记录,请重新输入数据!!!'
begin
print '没有找到符合条件的记录'
end
end 存储 select --------------------编程问答-------------------- 有点多,还是自己慢慢调试下吧
补充:.NET技术 , ASP.NET