Announcement

Collapse
No announcement yet.

Stored Procedure liefert keinen return Wert

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Stored Procedure liefert keinen return Wert

    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:

    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
    So habe ich nun die SP aufgebaut ( bitte entschuldigt meine Anfängerfehler :-(

    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
    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

  • #2
    Ich hab mir Dein Beispiel nicht komplett angesehen.
    das "Übertragen" oder besser Dupplizieren der Werte innerhalb der gleichen Tabelle erfolgt am einfachsten so:
    Code:
    insert into table tZiel 
             (feld1, .. feldN)
      select (feld1, .. feldN) 
        from tZiel 
       where feldy = < Bedingung >
    Voraussetzung wäre u.a. ein AutoID Feld als Primary Key, das in der Anweisung ausgelassen wird.
    Damit hast Du natürlich trotzdem identische Werte in den neuen Sätzen, dürfte gerade beim Datum stören.

    also das Ganze ungefähr so anpassen
    Code:
    insert into table tZiel 
             (zdatum, feld1, .. feldN)
      select (zdatum +365 , feld1, .. feldN) 
        from tZiel 
       where feldy = < Bedingung >
    Das Plus 365 musst Du durch die passende AddDate Funktion (da kann man einstellen, welches Intervall und wieviel davon, weiß ich aber nicht auswendig) in MS SQL ersetzen.
    Gruß, defo

    Comment


    • #3
      Hi,

      dankeschön defo, sehr lieb von dir

      Mein Haupt"problem" ist eig... dass ich immer alle Werte für ein ganzes Jahr übertragen sollte. Mit den meisten SQL-Statements und vor allem subqueries kann man ja leider immer nur eine Zeile auswählen, updaten usw...

      Bei mir sollten mit einem Klick in der Applikation ( z.B. "Werte übertragen von 2013 " ) alle Werte aus dem Jahr 2013 1:1 in 2014 , also für jeden Monat, übertragen werden.

      Dafür wollte ich dann den Cursor einbauen, damit er mir jeden Monat " fetcht" , aber ich habe das Gefühl ich habe mir keinen Gefallen damit getan.

      LG, Michi

      Comment


      • #4
        Hi,

        ich denke ich habs nun :-) hab ein "bisschen" zu kompliziert gedacht ;-) dankeschöööön

        schönen tag euch allen

        Comment


        • #5
          Originally posted by SQL_Anfänger View Post
          ich denke ich habs nun :-) hab ein "bisschen" zu kompliziert gedacht ;-) dankeschöööön
          Sehr schön! Wie wär's, wenn Du es hier postest für alle? Darum geht's in so einem Forum ja auch!
          Gruß, defo

          Comment

          Working...
          X