Einzelnen Beitrag anzeigen

Norbert987

Registriert seit: 27. Nov 2003
Ort: Aachen
74 Beiträge
 
Delphi 7 Professional
 
#1

Rückgabe von VARCHAR aus StoredProcedure

  Alt 1. Jan 2012, 17:12
Datenbank: MSSQL • Version: 2008 • Zugriff über: SQL Server Management Studio 2008 R2
Hallo Zusammen,
ich wünsche euch allen ein frohes neues Jahr 2012!
Ich habe ein Probem mit der Weitergabe von Fehlermeldungen.
Der Testaufruf lautet:
Code:
DECLARE @errmsg VARCHAR;

EXEC setActivityTargetStart 'F9EAE9B7-F544-40E9-A06A-6EF52E770E6E', @errmsg OUTPUT

SELECT @errmsg


Hier wird die problematische Funktion aufgerufen, in @errmsg sollte die Fehlermeldung sein
Code:
ALTER PROCEDURE setActivityTargetStart
  @ProjectID   uniqueidentifier,
  @errmsg      VARCHAR(4000) OUTPUT
AS
BEGIN
   DECLARE @start DATETIME;


   -- prüfe auf mögliche Fehler
   EXEC pruefeAllocations @ProjectID, @errmsg;

   -- wenn keine Fehlermeldung vorliegt, starte berechnung
   -- IF @errmsg <> ''
   -- BEGIN
   --    SELECT @start = (SELECT [Start]
   --                 FROM
   --                    [RcProject].[dbo].[Project]
   --                 WHERE
   --                    ProjectID = @ProjectID);
   --       
   --    IF @start IS NULL
   --       EXEC dbo.calcStartDate @ProjectID
   --    ELSE
   --       EXEC dbo.calcTargetDate @ProjectID
   -- END;
END
GO


@errmsg wird richtig gefüllt, doch nicht richtig nach oben weitergereicht
Code:
ALTER PROCEDURE pruefeAllocations (@ProjectID uniqueidentifier, @errmsg VARCHAR(4000) OUTPUT)
AS
BEGIN
   DECLARE @actName VARCHAR(255);
   DECLARE @actDuration VARCHAR; --war eigentlich ints, allerdings wollte er die nicht selber kovertieren
   DECLARE @allDuration VARCHAR; --war eigentlich ints, allerdings wollte er die nicht selber kovertieren
   
   SET @errmsg = '';
   
   -- prüfe, ob zugewiesenen PT = Activityaufwand PT ist
   DECLARE curAlloc CURSOR FAST_FORWARD
   FOR
      SELECT act.Name
          , count(*) AS allocDuration
          , act.Duration AS Duration
      FROM
         calcResourceActivity calc
         JOIN VActivity act
           ON calc.ActivityID = act.ActivityID
      GROUP BY
         act.Name
        , act.Duration
      HAVING
         count(*) != act.Duration;
         
      OPEN curAlloc
      FETCH NEXT FROM curAlloc INTO @actName, @actDuration, @allDuration

      WHILE (@@FETCH_STATUS = 0)
      BEGIN
         SET @errmsg = @errmsg+'\nActivity '''+@actName+''' is not properly allocated ('+@actDuration+' of '+@allDuration+' allocated).';
                  
         FETCH NEXT FROM curAlloc INTO @actName, @actDuration, @allDuration
      END

   CLOSE curAlloc
   DEALLOCATE curAlloc
END
GO
Hat jemand eine Idee woran es liegt, dass ich ein NULL erhalte obwohl der String zusammengebaut wird? Ich habe es erst mittels RETURN versucht, doch kann man da nur INTs zurückgeben, entsprechend hatte ich auch nur den ersten Buchstaben in der Ausgabe.

Vielen Dank, Norbert
  Mit Zitat antworten Zitat