"Kristian Damm Jensen" <REdammMOVE@ofir.dk> wrote in
news:bvnt8r$uu0b6$1@ID-146708.news.uni-berlin.de:
> Jesper Stocholm wrote:
>> Jens Gyldenkærne Clausen <jens@gyros.invalid> wrote in
>> news:Xns94846EAB930ECjcdmfdk@gyrosmod.dtext.news.tele.dk:
>>
>>> Jesper Stocholm skrev:
>>>
>>>> Hent et antal rækker fra table1
>>>> loop igennem resultatet
>>>> for hver række
>>>> hvis tabel1.felt1 = 1
>>>> hent rækker fra tabel2
>>>
>>> Hvilken relation er der mellem tabel1 og tabel2? (skal du hente
>>> samtlige rækker i tabel 2 eller er der mulighed for join?) Dækker
>>> "tabel2" over flere tabeller?
>> [snip]
>>> Samme spørgsmål her - hvilken relation er der mellem tabel2 og
>>> tabel3?
>>
>>
>> Table 1: Delivery
>> PK DeliveryId
>>
>> Table 2: Tendance
>> PK TendanceId
>> FK DeliveryId
>>
>> Table 3: TendanceLine
>> PK TendanceLineId
>> FK TendanceId
>> FK DeliveryId
>>
>>>> Hvordan gør jeg det? Jeg har snuset mig frem til, at jeg i min
>>>> stored procedure skal bruge en fast forward-only cursor, men
>>>> hvordan bruger jeg den?
>>>
>>> Prøv at kigge på de templates der er tilgængelige i Query
>>> Analyzer
>>> (fanebladet ved siden af "Objects"). Her kan man hurtigt få leveret
>>> en skabelon til en cursor.
> Hvorfor skal det laves med en cursor?
Det er netop det, som jeg er usikker på.
> I forhold til hvad du har fortalt os indtil nu, er denne update
> tilstrækkelig.
>
> update tabel3
> set felt_47 = tabel2.felt2
> from tabel1 t1, tabel2 t2
> where t1.deliveryID = t2.deliveryId
> and t1.deliveryID = t3.deliveryID
> and t2.deliveryID = t3.deliveryID
> -- redundant, men hvad aldrig hvad optimizeren kan
> finde på
> and t1.felt1 = 1
> and t2.tendanceID = t3.tendanceID
Jeg kan lige give her hele pseudokoden:
Hent relevante rækker i Table_U
For hver række i udtræk fra Table_U
Set @dId_ = Table_D.DId
Hent rækker fra Table_E hvor Table_E.DId = @dId_
For hver række i udtræk af Table_E
SET @EId_ = Table_E.EId
Hvis Table_E.Felt1 = z
Opdater eller opret række i Table_C med 6-8 felter fra Table_E
Udtræk rækker fra Table_EL Hvor Table_EL.EId = @EId_
For hver række i udtræk af Table_EL
Hvis Table_EL.Felt1 = 0 og Table_EL.Felt2 = "gebyr"
Opdater Table_D -> sæt Table_D.Dato = <tidspunkt> WHERE Table_D.DebitId = <someId>
<someId> findes ikke i Table_EL, men i Table_E, så den hentes via
FK EId i Table_EL, der er primær nøgle i Table_E.
Table Table_E:
--------------
PK EId
FK <someId>
Table Table_EL:
---------------
PK ELId
FK EId
Table Table_D:
--------------
PK:<someId>
--
Jesper Stocholm
http://stocholm.dk