Tabellenwertige FUnktion im JOIN oder nur über Zeiger?

24/04/2009 - 13:40 von Georg Gungl | Report spam
Hallo NG,

ich habe mir eine Beispielfunktion in C# geschrieben, welche anhand der
Parameter
@AnkunftTermin, @VariantenMax, @AufenthaltMinTage, @AufenthaltMaxTage und
@VerlaengerungIntervall
die Liste der AbreiseTermine liefert:

SELECT * FROM [dbo].[GetAbreiseTermine] ( GETDATE(), 3, 7, 21, 7 )
GO

AbreiseTermin
2009-05-01 13:29:23.970
2009-05-08 13:29:23.970
2009-05-15 13:29:23.970

(3 Zeile(n) betroffen)

So weit klappt es prima :)

Nun sollen die Parameter aus Tabellen kommen (Muster: 100+ Tupel,
AnkunftTermine: 10.000+ Tupel ==> Kombination: 1Mill.+ Tupel).
Mein Versuch als Step1:

SELECT m.Mandant
, m.Destination
, m.Leistungsart
, m.Befoerderung
, m.VariantenMax
, m.AufenthaltMinTage
, m.AufenthaltMaxTage
, m.VerlaengerungIntervall
, GETDATE() AS AnkunftTermin
, AbreiseTermineList.AbreiseTermin
FROM dbo.DestinationUnterkunftFahrtermineMuster AS m
CROSS JOIN dbo.GetAbreiseTermine(GETDATE(), m.VariantenMax,
m.AufenthaltMinTage, m.AufenthaltMaxTage, m.VerlaengerungIntervall) AS
AbreiseTermineList
GO

Klappt nicht :-(

Geht es über JOIN garnicht? Muss ich die Muster per Cursor durchlaufen?

Ich konnte mir leider nixx Passendes gerüber ergoogeln...

Ciao:
GG ;-)
 

Lesen sie die antworten

#1 Georg Gungl
24/04/2009 - 14:18 | Warnen spam
Georg Gungl wrote:
Geht es über JOIN garnicht? Muss ich die Muster per Cursor
durchlaufen?


Das hier wàre die CURSOR-Variante (funktioniert auch), JOIN wàre mir aber
lieber:

DECLARE @Mandant smallint
DECLARE @Destination smallint
DECLARE @Leistungsart nvarchar(3)
DECLARE @Befoerderung nvarchar(3)
DECLARE @AufenthaltMinTage smallint
DECLARE @AufenthaltMaxTage smallint
DECLARE @VerlaengerungIntervall smallint
DECLARE @VariantenMax smallint
DECLARE @AnkunfWochentage smallint

DECLARE curMuster CURSOR FORWARD_ONLY
FOR SELECT [dbo].[DestinationUnterkunftFahrtermineMuster].[Mandant]
, [dbo].[DestinationUnterkunftFahrtermineMuster].[Destination]
,
[dbo].[DestinationUnterkunftFahrtermineMuster].[Leistungsart]
,
[dbo].[DestinationUnterkunftFahrtermineMuster].[Befoerderung]
,
[dbo].[DestinationUnterkunftFahrtermineMuster].[AufenthaltMinTage]
,
[dbo].[DestinationUnterkunftFahrtermineMuster].[AufenthaltMaxTage]
,
[dbo].[DestinationUnterkunftFahrtermineMuster].[VerlaengerungIntervall]
,
[dbo].[DestinationUnterkunftFahrtermineMuster].[VariantenMax]
,
[dbo].[DestinationUnterkunftFahrtermineMuster].[AnkunfWochentage]
FROM [dbo].[DestinationUnterkunftFahrtermineMuster] ;
OPEN curMuster ;
FETCH NEXT FROM curMuster INTO @Mandant, @Destination, @Leistungsart,
@Befoerderung, @AufenthaltMinTage, @AufenthaltMaxTage,
@VerlaengerungIntervall, @VariantenMax, @AnkunfWochentage ;

WHILE @@FETCH_STATUS = 0
BEGIN
SELECT m.Mandant
, m.Destination
, m.Leistungsart
, m.Befoerderung
, GETDATE() AS AnkunftTermin
, AbreiseTermineList.AbreiseTermin
FROM dbo.DestinationUnterkunftFahrtermineMuster AS m
CROSS JOIN dbo.GetAbreiseTermine(GETDATE(), @VariantenMax,
@AufenthaltMinTage, @AufenthaltMaxTage, @VerlaengerungIntervall) AS
AbreiseTermineList
WHERE m.Mandant = @Mandant
AND m.Destination = @Destination
AND m.Leistungsart = @Leistungsart
AND m.Befoerderung = @Befoerderung ;

FETCH NEXT FROM curMuster INTO @Mandant, @Destination,
@Leistungsart, @Befoerderung, @AufenthaltMinTage, @AufenthaltMaxTage,
@VerlaengerungIntervall, @VariantenMax, @AnkunfWochentage ;
END ;
DEALLOCATE curMuster ;

Ähnliche fragen