Hallo zusammen,
bevor ich den Code poste, der nicht will, was ich will, beschreibe ich mein Problem:
Ich habe zwei Tabellen. Eine Tabelle (1) mit Bewegungsdaten und eine Tabelle (2) mit Zuordnungsdaten
In (1) habe ich (u.a.) folgende Columns:
- Kundennummer
- Kundenposition
- Absatz
- Abgang_Jahr
- Abgang_Monat
Die Datensätze sehen wie folgt aus:
Kunde 4711 Pos 1 Absatz 1000 Abgang NULL
Kunde 4712 Pos 1 Absatz 500 Abgang NULL
Kunde 9999 Pos 1 Absatz - ABGANG 2010/04
Kunde 9999 ist ein Lager, Kunde 4711 und 4712 ein Endkunde. Abgangsdatum steht nur am Lager, nicht am Endkunden. Ich will nun aber wissen, welcher Absatz durch welches abgehende Lager weggebrochen ist
In (2) steht drin, welches Lager zu welchem Kunden gehört. Bsp.:
Kunde 4711 Pos 1 Lager 9999 Pos 1
Kunde 4712 Pos 1 Lager 9999 Pos 1
etc
Ich möchte nun das Abgangsdatum des Lagers via UPDATE an den entsprechenden Kundendatensatz des Endkunden einfügen.
Mein Ansatz wäre ein Cursor, der folgendes macht:
a) Suche alle Lager mit Abgang in (1)
b) Schau nach in (2) welche Kunden dazu gehören
c) Aktualisiere diese Kunden in (1) mit dem Abgangsdatum des Lagers
Folgenden Code habe ich benutzt, aber er will nicht. (Hintergrund: Ich habe 7 Jahre keinen Cursor mehr geschrieben und grad fachlich etwas ratlos)
Gespeicherte Prozedur:
Ich bitte um Hilfe und danke im Voraus!
bevor ich den Code poste, der nicht will, was ich will, beschreibe ich mein Problem:
Ich habe zwei Tabellen. Eine Tabelle (1) mit Bewegungsdaten und eine Tabelle (2) mit Zuordnungsdaten
In (1) habe ich (u.a.) folgende Columns:
- Kundennummer
- Kundenposition
- Absatz
- Abgang_Jahr
- Abgang_Monat
Die Datensätze sehen wie folgt aus:
Kunde 4711 Pos 1 Absatz 1000 Abgang NULL
Kunde 4712 Pos 1 Absatz 500 Abgang NULL
Kunde 9999 Pos 1 Absatz - ABGANG 2010/04
Kunde 9999 ist ein Lager, Kunde 4711 und 4712 ein Endkunde. Abgangsdatum steht nur am Lager, nicht am Endkunden. Ich will nun aber wissen, welcher Absatz durch welches abgehende Lager weggebrochen ist
In (2) steht drin, welches Lager zu welchem Kunden gehört. Bsp.:
Kunde 4711 Pos 1 Lager 9999 Pos 1
Kunde 4712 Pos 1 Lager 9999 Pos 1
etc
Ich möchte nun das Abgangsdatum des Lagers via UPDATE an den entsprechenden Kundendatensatz des Endkunden einfügen.
Mein Ansatz wäre ein Cursor, der folgendes macht:
a) Suche alle Lager mit Abgang in (1)
b) Schau nach in (2) welche Kunden dazu gehören
c) Aktualisiere diese Kunden in (1) mit dem Abgangsdatum des Lagers
Folgenden Code habe ich benutzt, aber er will nicht. (Hintergrund: Ich habe 7 Jahre keinen Cursor mehr geschrieben und grad fachlich etwas ratlos)
Code:
DECLARE @dbname VARCHAR(50) DECLARE @Kundennummer VARCHAR(256) DECLARE @Position VARCHAR(256) DECLARE @Endkunde VARCHAR(256) DECLARE @EndkundePos VARCHAR(256) DECLARE @ABGANGSJAHR VARCHAR(4) DECLARE @ABGANGSMONAT VARCHAR(2) DECLARE db_cursor CURSOR FOR SELECT KUNDENNUMMER, KUNDENPOSITION, ABGANG_JAHR, ABGANG_MONAT FROM Sparten.FACT_AutogasZugangAbgang WHERE (SPARTE LIKE '%Agentur%') AND (ABGANG_JAHR <> '') AND (ABGANG_MONAT <> '') OPEN db_cursor FETCH NEXT FROM db_cursor INTO @KUNDENNUMMER, @Position,@ABGANGSJAHR, @ABGANGSMONAT WHILE @@FETCH_STATUS = 0 BEGIN SELECT KdNr, Pos FROM Sparten.DIM_Kunde_Zentralversorger WHERE ZVersNR = @KUNDENNUMMER AND ZVersPos = @Position SET @Endkunde = KdNr SET @EndkundePos = Pos EXEC sp_AktualisiereKundeMitZentralversorgerAbgangsdatum @Endkunde, @EndkundePos,@ABGANGSJAHR, @ABGANGSMONAT FETCH NEXT FROM db_cursor INTO @KUNDENNUMMER, @Position,@ABGANGSJAHR, @ABGANGSMONAT END CLOSE db_cursor DEALLOCATE db_cursor
Code:
CREATE PROCEDURE sp_AktualisiereKundeMitZentralversorgerAbgangsdatum @Endkunde varchar(256), @EndkundePos varchar(256), @ABGANGSJAHR varchar (4), @ABGANGSMONAT varchar (2) AS BEGIN SET NOCOUNT ON; UPDATE Sparten.FACT_AutogasZugangAbgang SET ABGANG_JAHR = @ABGANGSJAHR, ABGANG_MONAT = @ABGANGSMONAT WHERE KUNDENNUMMER = @Endkunde AND KUNDENPOSITION = @EndkundePos END
Comment