Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Rückgabe von VARCHAR aus StoredProcedure (https://www.delphipraxis.net/165461-rueckgabe-von-varchar-aus-storedprocedure.html)

Norbert987 1. Jan 2012 16:12

Datenbank: MSSQL • Version: 2008 • Zugriff über: SQL Server Management Studio 2008 R2

Rückgabe von VARCHAR aus StoredProcedure
 
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

Furtbichler 1. Jan 2012 20:01

AW: Rückgabe von VARCHAR aus StoredProcedure
 
Du must auch beim Aufrufen angeben, das es sich um einen OUTPUT Parameter handelt
Code:
EXEC MyProcedure @MyVar, @MyReturnVar output

Norbert987 1. Jan 2012 21:19

AW: Rückgabe von VARCHAR aus StoredProcedure
 
Top das wars. Vielen Dank!


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz