Wie verwende ich einen Wert aus einer gespeicherten Prozedur in einem anderen?

8

Ich habe die folgende Anweisung in einer Stored Procedure:

%Vor%

Welches eine andere gespeicherte Prozedur mit der folgenden Anweisung innerhalb aufruft:

%Vor%

Aber wenn ich den Aufruf teste, gibt der EXEC den Wert korrekt aus, aber es ist der @Count-Variablen nicht korrekt zugewiesen. Ich habe Beispiele oder gespeicherte Prozeduren gesehen, die so verwendet wurden, einschließlich hier, aber keiner hatte einen Parameter und einen Rückgabewert (den ich finden konnte). Der ID-Parameter wird in die zweite Anweisung übergeben, die einen Zählwert zurückgibt, der von der ersten StoredProcedure verwendet wurde - alle gelesenen Informationen scheinen anzuzeigen, dass dies funktionieren sollte - aber der @Count-Wert ist nicht null, selbst wenn GetItemCount gibt immer den korrekten Wert zurück.

Dies ist in Microsoft SQL Server 2008, wenn das hilft.

    
RoguePlanetoid 08.06.2010, 09:53
quelle

6 Antworten

22

In Ihrer gespeicherten Prozedur sind Sie entweder

a) Den Zählwert einem Ausgabeparameter zuweisen:

%Vor%

wird wie folgt aufgerufen:

%Vor%

oder, b) Zuweisen des Zählwerts als Rückgabewert:

%Vor%

wird wie folgt aufgerufen:

%Vor%     
Matthew Abbott 08.06.2010, 09:59
quelle
2

Sie sollten @Count als Ausgabeparameter übergeben.

%Vor%     
codingbadger 08.06.2010 10:01
quelle
1

Ein anderer Weg

%Vor%     
Madhivanan 08.06.2010 10:33
quelle
1

Die Lösung (b) von Mr. Matthew wird nicht funktionieren, wenn Sie diese in einer anderen gespeicherten Prozedur aufrufen (Natürlich funktioniert die Lösung (a) perfekt, wenn wir OUTPUT param verwenden). Der Wechsel für die Lösung (b) ist die Lösung von Herrn Madhivanan. d. h. erstellen Sie eine temporäre Tabelle und verwenden Sie sie dann, um sie zu löschen.

Unten sind andere Lösungen ..

Wir können den Wert einer internen OUTPUT-Klausel in einer gespeicherten Prozedur nicht direkt abrufen. Daher müssen wir stattdessen OUTPUT-Parameter oder RETURN VALUE verwenden.

Bitte beachten Sie die folgenden Vorschläge:

LÖSUNG 1:

%Vor%

LÖSUNG: 2

%Vor%     
santhosh kumar Gudise 02.05.2012 10:25
quelle
0

Was Sie in der Variablen @Count abfangen, ist der Status der Ausführung der gespeicherten Prozedur GetItemCount und nicht der Wert, den Sie erwarten. Um diesen Wert zu erfassen, gibt es zwei Möglichkeiten.

  1. Um einen anderen Parameter @ count als OUTPUT in GetItemCount zu deklarieren. Also haben Sie die GetItemCount-Deklaration wie folgt

    CREATE PROCEDURE GetItemCount @ ID int, @ count int-Ausgabe

innen, können Sie

verwenden

SELECT @count = COUNT (Element) FROM tblItem WHERE ID = @ID

  1. Um vor dem Aufruf des proc eine Tabelle zu deklarieren und diesen Wert als Spalte zu erhalten.
mohang 08.06.2010 10:06
quelle
0

Das Folgende funktioniert nicht, wenn für den ausgeführten SP keine Eingabeparameter vorhanden sind:

%Vor%

Am besten, das folgende Format für alle Fälle zu verwenden (es funktioniert für alle Versionen):

%Vor%     
MC9000 01.12.2013 19:48
quelle