Hallo liebe Community,
ich hoffe ich bin hier richtig. Bin leider am verzweifeln :-(
Ich bin absolute SQL-Anfängerin und soll nun mittels Cursor und Stored Procedure eine Aufgabe lösen.
Folgender Hintergrund:
Kunde soll in der Applikation die Möglichkeit haben, eingetragene Werte für z.B. das Jahr 2013 mit einem Klick komplett in 2014 zu übertragen, also 201301 soll zu 201401 werden usw.
Folgendes habe ich mir vorgestellt ( SQL Server 2012 - MS SQL Server Management Studio )
Die Tabelle ST_Ziele (verkürzte Version zur Übersicht - im Original sind Werte für alle Monate eingetragen)
quelle.jpg
soll nach erfolgreicher Prozedur und Cursor ( damit alle 12 Monate erfasst werden) so aussehen:
als Beispiel wurde der Wert des Parameters '2014' gewählt
erg_soll.jpg
DDL der Tabelle ST_Ziele:
So habe ich nun die SP aufgebaut ( bitte entschuldigt meine Anfängerfehler :-(
Leider liefert sie mir nicht das gewünschte Ergebnis :-(
Wenn ich die Prozedur ausführe, sieht das so aus:
erg.jpg
Und nach dem Ausführen sieht die Tabelle so aus:
erg_tab.jpg
sorry wahrscheinlich ist es total lächerlich aber ich bin mit der Syntax leider nicht so vertraut und habe leider keine Ahnung mehr wie es gehen soll :-(
Vielen lieben Dank schonmal im Voraus.
Liebe Grüße,Michi
ich hoffe ich bin hier richtig. Bin leider am verzweifeln :-(
Ich bin absolute SQL-Anfängerin und soll nun mittels Cursor und Stored Procedure eine Aufgabe lösen.
Folgender Hintergrund:
Kunde soll in der Applikation die Möglichkeit haben, eingetragene Werte für z.B. das Jahr 2013 mit einem Klick komplett in 2014 zu übertragen, also 201301 soll zu 201401 werden usw.
Folgendes habe ich mir vorgestellt ( SQL Server 2012 - MS SQL Server Management Studio )
Die Tabelle ST_Ziele (verkürzte Version zur Übersicht - im Original sind Werte für alle Monate eingetragen)
quelle.jpg
soll nach erfolgreicher Prozedur und Cursor ( damit alle 12 Monate erfasst werden) so aussehen:
als Beispiel wurde der Wert des Parameters '2014' gewählt
erg_soll.jpg
DDL der Tabelle ST_Ziele:
Code:
USE [Test_Prozedur] GO /****** Object: Table [dbo].[ST_Ziele] Script Date: 02.04.2014 12:10:19 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[ST_Ziele]( [ID_OrgaEinheit_STR] [int] NOT NULL, [ID_Kennzahl] [int] NOT NULL, [Z_Datum] [int] NOT NULL, [Z_Art] [int] NULL, [Ziel_1] [float] NULL, [Ziel_2] [float] NULL, [Basiswert] [float] NULL, [ANL_User] [varchar](50) NULL, [ANL_Datum] [int] NULL, [AEN_User] [varchar](50) NULL, [AEN_Datum] [int] NULL ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO
Code:
USE [Test_Prozedur] GO /****** Object: StoredProcedure [dbo].[KZ_in_nJahr_2] Script Date: 02.04.2014 12:10:58 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER OFF GO ALTER procedure [dbo].[KZ_in_nJahr_2] @select_date int as begin declare @ID_Z int declare @KZ_Z int declare @date_Z int declare @Ziel1 float declare @Ziel2 float declare @date_Z_neu int declare @art int declare @basis int declare @anl varchar(50) declare @anl2 int declare @aen varchar(50) declare @aen2 int declare @id_z_neu int declare @z1_neu int create table #tempTable (ID_OrgaEinheit_STR int, ID_Kennzahl int, Z_Datum int, Z_Art int, Ziel_1 float, Ziel_2 float, Basiswert float, ANL_User varchar (50), ANL_Datum int, AEN_User varchar (50), AEN_Datum int) DECLARE value_month_in SCROLL CURSOR FOR SELECT distinct ID_OrgaEinheit_STR, ID_Kennzahl, Z_Datum, Z_Art, Ziel_1, Ziel_2, Basiswert, ANL_User, ANL_Datum, AEN_User, AEN_Datum FROM ST_Ziele where left(Z_Datum,4) = @select_date select ID_OrgaEinheit_STR = @ID_Z, ID_Kennzahl = @KZ_Z, Z_Datum = @date_Z, Z_Art= @art , Ziel_1 = @Ziel1, Ziel_2 = @Ziel2, Basiswert = @basis , ANL_User = @anl , ANL_Datum = @anl2 , AEN_User = @aen, AEN_Datum = @aen2 insert into #tempTable values (@ID_Z, @KZ_Z, @date_Z, @art , @Ziel1, @Ziel2, @basis , @anl , @anl2, @aen , @aen2 ) OPEN value_month_in FETCH NEXT FROM value_month_in into @ID_Z, @KZ_Z, @date_Z, @art , @Ziel1, @Ziel2, @basis , @anl , @anl2, @aen , @aen2 while @@fetch_status = 0 begin insert into ST_Ziele ([ID_OrgaEinheit_STR], [ID_Kennzahl], [Z_Datum], [Z_Art], [Ziel_1], [Ziel_2], [Basiswert], [ANL_User], [ANL_Datum], [AEN_User], [AEN_Datum]) values (@ID_Z, @KZ_Z, @date_Z, @art , @Ziel1, @Ziel2, @basis , @anl , @anl2, @aen , @aen2) declare value_month_out cursor for select distinct @ID_Z, @KZ_Z, @date_Z_neu, @art , @Ziel1, @Ziel2, @basis , @anl , @anl2, @aen , @aen2 from ST_Ziele where left(Z_Datum,4) = @select_date OPEN value_month_out fetch next from value_month_out into @ID_Z, @KZ_Z, @date_Z, @art , @Ziel1, @Ziel2, @basis , @anl , @anl2, @aen , @aen2 while @@FETCH_STATUS = 0 begin insert into #tempTable ([ID_OrgaEinheit_STR], [ID_Kennzahl], [Z_Datum], [Z_Art], [Ziel_1], [Ziel_2], [Basiswert], [ANL_User], [ANL_Datum], [AEN_User], [AEN_Datum]) values (@ID_Z, @KZ_Z, @date_Z, @art , @Ziel1, @Ziel2, @basis , @anl , @anl2, @aen , @aen2) fetch next from value_month_out into @ID_Z, @KZ_Z, @date_Z, @art , @Ziel1, @Ziel2, @basis , @anl , @anl2, @aen , @aen2 end CLOSE value_month_out DEALLOCATE value_month_out fetch next from value_month_in into @ID_Z, @KZ_Z, @date_Z, @art , @Ziel1, @Ziel2, @basis , @anl , @anl2, @aen , @aen2 end CLOSE value_month_in DEALLOCATE value_month_in select * from #tempTable where left([Z_Datum],4) = @select_date ; update #tempTable set ID_OrgaEinheit_STR = @ID_Z, ID_Kennzahl = @KZ_Z, Z_Datum = Z_Datum + 100, Z_Art= @art , Ziel_1 = @Ziel1, Ziel_2 = @Ziel2, Basiswert = @basis , ANL_User = @anl , ANL_Datum = @anl2 , AEN_User = @aen, AEN_Datum = @aen2 insert into dbo.ST_Ziele ( ID_OrgaEinheit_STR, ID_Kennzahl, Z_Datum, Z_Art, Ziel_1, Ziel_2, Basiswert, ANL_User, ANL_Datum, AEN_User, AEN_Datum ) values (@ID_Z, @KZ_Z, @date_Z, @art , @Ziel1, @Ziel2, @basis , @anl , @anl2, @aen , @aen2) select ID_OrgaEinheit_STR, ID_Kennzahl, Z_Datum, Z_Art, Ziel_1, Ziel_2, Basiswert, ANL_User, ANL_Datum, AEN_User, AEN_Datum from #tempTable order by Z_Datum ASC ; drop table #tempTable SET NOCOUNT OFF end
Wenn ich die Prozedur ausführe, sieht das so aus:
erg.jpg
Und nach dem Ausführen sieht die Tabelle so aus:
erg_tab.jpg
sorry wahrscheinlich ist es total lächerlich aber ich bin mit der Syntax leider nicht so vertraut und habe leider keine Ahnung mehr wie es gehen soll :-(
Vielen lieben Dank schonmal im Voraus.
Liebe Grüße,Michi
Comment