An dem selbem Problem habe ich diverse ergebnislose Tage verbracht.
Wenn EXECUTE ein SELECT aufruft anstatt eine SP (bzw. Sub-SP) mit Ausgabe Parameter kann man eine Variablenübergabe zwischen dem eingeschlossenen SELECT und der aufrufenden SP vergessen.
Die in der SP deklarierten Variablen sind dem durch EXECUTE aufgerufenem SELECT unbekannt, umgekehrt genauso ..
Ich habe damals versucht die gewünschten Parameter über eine TempTable abzurufen, ging auch nicht, weil die SP und der im EXECUTE gekapselte SELECT unterschiedliche ProcessID's haben und die TempTable schon wieder weg ist, bevor der nächste SP Befehl nach dem EXECUTE ausgeführt wird.
Ich denke dir bleiben nur 2 Varianten
1.
Baue dir ein paar kleine Sub-SP's (mit Ausgabeparametern) die du dann mit Execute aufrufst.
Über diese kannst du kann deine Variablen in der Haupt-SP füllen.
SQL-Code:
DECLARE @Code Varchar(10)
EXECUTE MeineSubSP "ein Input-Parameter", @Code -- << hier ohne Klammern
CREATE PROCEDURE MeineSubSP
(
@InputParam VARCHAR(50) = NULL,
@OutputParam VARCHAR(10) = NULL
)
AS
BEGIN
SELECT @OutputParam=Code FROM Irgendwo WHERE Vorname = @InputParam
END
2.
Definiere alle möglichen SELECTS's in der SP und rufe in Abhängigkeit von einem (oder mehreren) Parametern das richtige SELECT auf ....
SQL-Code:
CREATE PROCEDURE MeineSP
(
@SelectID INT = 0,
@SelectParam INT,
@SelectResult VARCHAR(10) = NULL
)
AS
BEGIN
IF @SelectID = 0
SELECT @SelectResult = PersonalNr FROM Personal ID = @SelectParam
IF @SelectID = 1
SELECT @SelectResult = PersonalNr FROM Praktikum ID = @SelectParam
If @SelectResult IS NOT NULL
SELECT bla FROM Verkaeufe WHERE PersonalNr = @SelectResult
END
Ich lasse mich gern eines besseren beleheren, aber derzeit bin ich fest davon überzeugt, das die Variablen, die in einem mit EXECUTE ausgeführten SELECT lokal sind, und nicht an den "aufrufenden Prozess" zurückgegeben werden können. Eine Weiterverarbeitung kann man also vergessen.
[keine Ironie oder Überheblichkeit]
Ich würde mich wirklich freuen, wenn jemand diese Behauptung mit einem kleinen Beispiel wiederlegen kann.
Dann kann ich viele meiner SP's um mehrere Hundert Zeilen Code kürzen ...
[/keine Ironie oder Überheblichkeit]
Schöne Grüße an alle,
Jens