Announcement

Collapse
No announcement yet.

GO-Befehl in stored procedure

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

  • GO-Befehl in stored procedure

    Bei der Erstellung einer stored-procedure für den MS-SQL-Server 2005 stoße ich auf das Problem, das bei der Verwendung eines GO-Befehls immer wieder eine Fehlermeldung kommt (als "normales" SQL-Skript funktioniert alles perfekt). Eigentlich sollten GO-Befehle doch funzen, oder? Kann mir dabei jemand helfen?
    Zuletzt editiert von hamschk76; 26.03.2007, 13:49.

  • #2
    Hallo Hamschk,

    ich weiss zwar nicht, wie die Procedure aussieht, aber wenn Du GO einfach weglässt, sollte es auch funktionieren... GO dient eigentlich nur als Batch-Seperator in den Scripten...

    Gruß
    Thomas

    Comment


    • #3
      Originally posted by Thomas Rith View Post
      Hallo Hamschk,

      ich weiss zwar nicht, wie die Procedure aussieht, aber wenn Du GO einfach weglässt, sollte es auch funktionieren... GO dient eigentlich nur als Batch-Seperator in den Scripten...

      Gruß
      Thomas
      Hallo Thomas,
      ich hab's ohne GO auch schon probiert. Da das Skript aber verhältnismässig lang ist und mit temporären Dateien arbeitet bricht er mir immer wieder ab,
      da er bestimmte Spalten nicht findet.
      Grüße
      Markus

      Comment


      • #4
        Kannst Du die SP mal posten?

        Gruß
        Thomas

        Comment


        • #5
          Ein kleiner Ausschnitt aus dem Skript:


          set ANSI_NULLS ON
          set QUOTED_IDENTIFIER ON
          go







          -- =============================================
          -- Author: <none>
          -- Create date: <none>
          -- Description: <XXX>
          -- =============================================

          ALTER PROCEDURE [dbo].[sp_Test]

          /*(
          @DatumVon varchar(8),
          @DatumBis varchar(8)
          )*/

          AS

          BEGIN

          SET IMPLICIT_TRANSACTIONS ON

          /*Berechnung des Umsatzes 2006*/

          IF EXISTS (SELECT * FROM SYS.OBJECTS
          WHERE OBJECT_ID = OBJECT_ID(N'tmp1')
          AND TYPE IN (N'U'))
          DROP TABLE tmp1


          /*Eigentliche Berechnung des Umsatzes 2006 in tmp-file*/


          ALTER TABLE Berechnung.T_KUNDE
          ADD KUN_Umsatz2006 FLOAT



          SELECT Berechnung.T_KUNDE.KUN_ID, SUM(Berechnung.T_Position.POS_Umsatz) AS Umsatz
          INTO tmp1
          FROM Berechnung.T_KUNDE INNER JOIN
          Berechnung.T_Position ON Berechnung.T_KUNDE.KUN_Id_Ref = Berechnung.T_Position.POS_Kunde_ID
          WHERE POS_Datum >= 20060101 AND POS_Datum <= 20061231
          GROUP BY Berechnung.T_KUNDE.KUN_ID

          /*Update des Umsatzes in Berechnung.T_Kunde*/



          UPDATE Berechnung.T_KUNDE
          SET Berechnung.T_KUNDE.KUN_Umsatz2006=tmp1.Umsatz
          FROM Berechnung.T_KUNDE FULL OUTER JOIN
          tmp1 ON Berechnung.T_KUNDE.KUN_ID = tmp1.KUN_ID



          UPDATE Berechnung.T_KUNDE
          SET KUN_Umsatz2006 = 0
          WHERE KUN_Umsatz2006 IS NULL



          IF EXISTS (SELECT * FROM SYS.OBJECTS
          WHERE OBJECT_ID = OBJECT_ID(N'tmp1')
          AND TYPE IN (N'U'))
          DROP TABLE tmp1







          COMMIT TRANSACTION









          /*Berechnung des Gesamtumsatzes*/

          IF EXISTS (SELECT * FROM SYS.OBJECTS
          WHERE OBJECT_ID = OBJECT_ID(N'tmp1')
          AND TYPE IN (N'U'))
          DROP TABLE tmp1


          /*Eigentliche Berechnung des Umsatzes in tmp-file*/


          ALTER TABLE Berechnung.T_KUNDE
          ADD KUN_Umsatz_gesamt FLOAT



          SELECT Berechnung.T_KUNDE.KUN_ID, SUM(Berechnung.T_Position.POS_Umsatz) AS Umsatz
          INTO tmp1
          FROM Berechnung.T_KUNDE INNER JOIN
          Berechnung.T_Position ON Berechnung.T_KUNDE.KUN_Id_Ref = Berechnung.T_Position.POS_Kunde_ID
          GROUP BY Berechnung.T_KUNDE.KUN_ID

          /*Update des Umsates in Berechnung.T_Kunde*/


          UPDATE Berechnung.T_KUNDE
          SET Berechnung.T_KUNDE.KUN_Umsatz_gesamt=tmp1.Umsatz
          FROM Berechnung.T_KUNDE FULL OUTER JOIN
          tmp1 ON Berechnung.T_KUNDE.KUN_ID = tmp1.KUN_ID



          UPDATE Berechnung.T_KUNDE
          SET KUN_Umsatz_gesamt = 0
          WHERE KUN_Umsatz_gesamt IS NULL



          IF EXISTS (SELECT * FROM SYS.OBJECTS
          WHERE OBJECT_ID = OBJECT_ID(N'tmp1')
          AND TYPE IN (N'U'))
          DROP TABLE tmp1







          COMMIT TRANSACTION


          SET IMPLICIT_TRANSACTIONS OFF


          END

          Comment


          • #6
            Angepasst

            Hi hamschk76,

            hab den Code mal ein bissle angepasst... Sollte jetzt einfacher sein. Und die Tabellenänderungen würde ich vorher in einem extrascript machen... vielleicht ist das auch das Problem...

            Gruß
            Thomas

            Code:
            ALTER PROCEDURE [dbo].[sp_Test]
            /*(
            @DatumVon varchar(8),
            @DatumBis varchar(8)
            )*/
            AS
            BEGIN
            
            SET IMPLICIT_TRANSACTIONS ON
            
            /*Berechnung des Umsatzes 2006*/
            /*  -- Wird nicht benötigt!!
            IF EXISTS (SELECT * FROM SYS.OBJECTS 
            WHERE OBJECT_ID = OBJECT_ID(N'tmp1') 
            AND TYPE IN (N'U'))
            DROP TABLE tmp1
            */
            
            /*Eigentliche Berechnung des Umsatzes 2006 in tmp-file*/
            -- Vorher anlegen... aber wenn schon dann prüfen, da man die Procedure sonst nur einmal ausführen kann...
            if (select COLUMNPROPERTY(OBJECT_ID('Berechnung.T_KUNDE'), 'KUN_Umsatz2006' , 'AllowsNull')) is null
            	ALTER TABLE Berechnung.T_KUNDE ADD KUN_Umsatz2006 FLOAT
            
            /*Update des Umsatzes in Berechnung.T_Kunde*/
            UPDATE 
            	Berechnung.T_KUNDE 
            SET 	
            	Berechnung.T_KUNDE.KUN_Umsatz2006 = isnull(tmp.Umsatz, 0)
            FROM 
            	Berechnung.T_KUNDE 
            Left Join 
            	(SELECT 
            		Berechnung.T_KUNDE.KUN_ID, SUM(Berechnung.T_Position.POS_Umsatz) AS Umsatz
            	FROM 
            		Berechnung.T_KUNDE 
            	INNER JOIN
            		Berechnung.T_Position ON Berechnung.T_KUNDE.KUN_Id_Ref = Berechnung.T_Position.POS_Kunde_ID
            	WHERE 
            		POS_Datum >= 20060101 AND POS_Datum <= 20061231
            	GROUP BY 
            		Berechnung.T_KUNDE.KUN_ID
            	) as tmp ON Berechnung.T_KUNDE.KUN_ID = tmp.KUN_ID
            
            /* wird auch nicht mehr benötigt
            UPDATE Berechnung.T_KUNDE
            SET KUN_Umsatz2006 = 0
            WHERE KUN_Umsatz2006 IS NULL
            */
            
            /*
            IF EXISTS (SELECT * FROM SYS.OBJECTS 
            WHERE OBJECT_ID = OBJECT_ID(N'tmp1')
            AND TYPE IN (N'U'))
            DROP TABLE tmp1
            */
            
            COMMIT TRANSACTION

            Comment


            • #7
              Vielen Dank, werd' ich morgen gleich mal ausprobieren!!
              Grüße!!
              Markus

              Comment

              Working...
              X