1 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 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
| ALTER PROCEDURE [dbo].[Act_PathFinder2]
@TypeOP as int
,@Source as varchar(max)
,@Destination as varchar(max)
AS
SET NOCOUNT ON;
-- Declaration des variables locales et tables temporaires
DECLARE @Groupe01_Source varchar(max)
,@Groupe02_Source varchar(max)
,@Groupe01_Destination varchar(max)
,@Groupe02_Destination varchar(max)
IF object_id('#Temp_Def_Section_Runtime') is not null
drop table #Temp_Def_Section_Runtime
create table #Temp_Def_Section_Runtime
(
[Source] varchar(max)
,[Destination] varchar(max)
,[Type_ID] int
,[Groupe01] varchar(max)
,[Groupe02] varchar(max)
)
--******************************************************************************************************************************
insert into #Temp_Def_Section_Runtime
Select source,Destination,Type_ID,Groupe01,Groupe02
from T_Def_Section
where Direction_OP <> 0
union all
Select Destination,source, Type_ID,Groupe01,Groupe02
from T_Def_Section
where Direction_OP =2
--******************************************************************************************************************************
--
select @Groupe01_source= groupe01
,@Groupe02_Source= groupe02
from #Temp_Def_Section_Runtime
where Source=@Source
select @Groupe01_Destination= groupe01
,@Groupe02_Destination= groupe02
from #Temp_Def_Section_Runtime
where Destination=@Destination
--******************************************************************************************************************************
-- Calcul de tous les chemins possibles en respectant les regles suivantes:
-- Ne pas passer 2x par la meme connexion de pontage
-- Ne pas passer 2x par la meme connexion de gare
-- Ne pas passer 2x par le meme point
;WITH
journey (j_Dest, j_Step, j_Type_ID, j_Way)
AS
(
SELECT DISTINCT Source
,0
,0
,cast(@Source as varchar(max))
FROM #Temp_Def_Section_Runtime
WHERE Source = @Source
UNION ALL
SELECT destination
,departure.j_Step + 1
,Type_ID
,cast(departure.j_Way +','+ arrival.Destination as varchar(max))
FROM #Temp_Def_Section_Runtime AS arrival
inner JOIN journey AS departure
ON departure.j_Dest = arrival.Source
where (
(departure.j_Type_ID= 104 and arrival.Type_ID<>104) -- Ne pas passer 2x par la meme connexion de pontage
or --
(departure.j_Type_ID<>104 and arrival.Type_ID= 104) --
or --
(departure.j_Type_ID= 102 and arrival.Type_ID<>102) -- Ne pas passer 2x par la connexion de cuve
or --
(departure.j_Type_ID<>102 and arrival.Type_ID= 102) --
or
(departure.j_Type_ID= 103 and arrival.Type_ID<>103 and arrival.Type_ID<>101) -- Ne pas passer 2x par la connexion de Gare ou flexible
or
(departure.j_Type_ID<>103 and departure.j_Type_ID<>101 and arrival.Type_ID= 103)
or
(departure.j_Type_ID in (0,1,201,202,203,300) and arrival.Type_ID in (0,1,201,202,203,300)) -- Prise en compte des autres types de pontage sans restriction
)
and departure.j_Way not like '%' + arrival.Destination + '%'
)
--******************************************************************************************************************************
-- Recuperation des 4 + courts chemins menant à Rome
select top 4
j_Step
,j_way
FROM journey
where j_Dest=@Destination
order by j_step
option (maxrecursion 0)
drop table #Temp_Def_Section_Runtime |