Rückgabewert einer Stored Procedure in Variable speichern und der nächsten SP übergeben



  • Hi Leute,

    ich schreibe gerade mehrere SP in C# für den MSSQL2005 und gebe dort per

    SqlMetaData guid = new SqlMetaData(Name, SqlDbType.UniqueIdentifier);
                SqlDataRecord result = new SqlDataRecord(guid);
                result.SetGuid(0, GUID);
                SqlPipe p = SqlContext.Pipe;
                p.Send(result);
    

    ein Ergebnisset zurück, das aus einer Zeile mit einer Spalte besteht und eine GUID beinhaltet.

    Diese GUID möchte ich jetzt in einer Variable speichern und dann der nächsten SP übergeben.
    Mein Versuch schlägt leider fehl. Fehlermeldung:

    Operand type clash: int is incompatible with uniqueidentifier

    Mein Code ist:

    DECLARE @EventGUID uniqueidentifier,
    		@RecipientGUID uniqueidentifier;
    
    exec @EventGUID = CreateEvent 'text', 'text', true
    
    exec @RecipientGUID = CreateRecipient 'text', 'text', 1031, 1033, null, null, null, 'text'
    
    exec CreateJob 'text', @RecipientGUID, false, 10, '', false, '00000000-0000-0000-0000-000000000000', @EventGUID
    

    Kann mir jemand weiterhelfen?



  • Die Rückgabewerte von Stored Procedures sind - zumindest beim SQL Server 2000 - immer vom Typ Integer.

    Bei deinem Szenario solltest du mit OUTPUT-Parametern arbeiten.



  • Hi Finten,

    vielen Dank für deine Antwort. Du sagst mir damit nichts neues (in der Zwischenzeit habe ich das auch alles herausgefunden) 🙂
    Trotzdem fände ich es schön, wenn ich die Tabelle, die ich per SqlPipe sende, irgendwie auswerten könnte...



  • Hi,

    wie hast du dies gemacht?
    Normalerweise hätte ich für dieses Problem FUNCTION statt PROCEDURE verwendet



  • Scania schrieb:

    wie hast du dies gemacht?

    Was meinst du?

    Scania schrieb:

    Normalerweise hätte ich für dieses Problem FUNCTION statt PROCEDURE verwendet

    Wieso?



  • Diese GUID möchte ich jetzt in einer Variable speichern und dann der nächsten SP übergeben.

    Du hast das Resultset verändert, aber mit Procedure kannst du doch keinen direkten Rückgabewert zurückliefern, halt nur über OUTPUT, FUNCTION hat einen Rückgabwert?

    exec @EventGUID = CreateEvent 'text', 'text', true
    

    Vielleicht hab ich gerade auch einen Denkfehler!



  • Ich glaube das Problem ist, dass man Funktionen nicht einfach so aufrufen kann.



  • Man kann sie von außen glaub ich schwerer Aufrufen, in der Datebank gab es bei mir bis jetzt noch keine Probleme. Ich verwende diese für SELECT, PROCEDURE, TIGGERS usw. bis jetzt Problemlos



  • korrekt. Aber alleinstehend kannst du sie nciht aufrufen. Sie müssen immer Teil eines Querys sein.


Anmelden zum Antworten