Hi Community,
hier mal ein ganz theoretisches Problem.
Ziel ist, in einer Tabelle eine laufende Summe mitzuspeichern, die Bereits bei der Eingabe der Daten geschrieben wird. (siehe Codebeispiel)
Das klappt auch soweit wunderbar, solange jedesmal lediglich ein Datensatz importiert wird.
Ich wurde im Rahmen einer Schulung darauf angesprochen, konnte natürlich auch Lösungen präsentieren.
1. Das ganze über einen Cursor erledigen
2. Im Nachlauf nochmal über die Tabelle gehen.
Ich suche aber gerne nach eleganteren Lösungen - hat vielleicht jemand eine Idee, wie ich auch mehrere Datensätze direkt beim Import richtig einfügen kann.
Den Code habe ich auf das Wesentliche reduziert, danke für Eure Antworten
Roland
CREATE TABLE [dbo].[tblStamm]( [st_ID] [int] IDENTITY(1,1) NOT NULL, [st_Einzahlung] [float] NOT NULL, [st_Bestand] [float] NOT NULL, CONSTRAINT [PK_tblSta] PRIMARY KEY CLUSTERED ( [st_ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO CREATE TABLE [dbo].[tblImport]( [imp_ID] [int] IDENTITY(1,1) NOT NULL, [imp_Einzahlung] [float] NOT NULL, CONSTRAINT [PK_tblImport] PRIMARY KEY CLUSTERED ( [imp_ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO INSERT INTO tblImport ( imp_Einzahlung ) VALUES (10),(10),(20) INSERT INTO [tblStamm] ( [st_Einzahlung], [st_Bestand] ) SELECT imp_Einzahlung, imp_Einzahlung + (SELECT ISNULL(Sum((st_Einzahlung)),0) FROM tblStamm) FROM tblImport ORDER BY imp_ID Update tblStamm SET st_Bestand = (SELECT SUM(st_Einzahlung) FROM tblStamm s WHERE s.st_ID <= tblStamm.st_ID) SELECT * FROM tblImport SELECT * FROM tblStamm /* TRUNCATE TABLE tblStamm TRUNCATE TABLE tblImport */ /* DROP TABLE tblStamm DROP TABLE tblImport */
It's no problem, it's just the syntax