Es gibt drei Möglichkeiten, die Sie verwenden können: den Wert RETURN, den Parameter OUTPUT und eine Ergebnismenge
Achten Sie auch darauf, wenn Sie das Muster verwenden: SELECT @Variable=column FROM table ...
Wenn von der Abfrage mehrere Zeilen zurückgegeben werden, enthält Ihre @Variable nur den Wert der letzten von der Abfrage zurückgegebenen Zeile.
RETURN VALUE,
da Ihre Abfrage ein int-Feld zurückgibt, zumindest basierend darauf, wie Sie es benannt haben. Sie können diesen Trick verwenden:
CREATE PROCEDURE GetMyInt
( @Param int)
AS
DECLARE @ReturnValue int
SELECT @ReturnValue=MyIntField FROM MyTable WHERE MyPrimaryKeyField = @Param
RETURN @ReturnValue
GO
und jetzt rufen Sie Ihre Prozedur wie folgt auf:
DECLARE @SelectedValue int
,@Param int
SET @Param=1
EXEC @SelectedValue = GetMyInt @Param
PRINT @SelectedValue
Dies funktioniert nur für INTs, da RETURN nur einen einzelnen int-Wert zurückgeben kann und Nullen in eine Null konvertiert werden.
AUSGABEPARAMETER
Sie können einen Ausgabeparameter verwenden:
CREATE PROCEDURE GetMyInt
( @Param int
,@OutValue int OUTPUT)
AS
SELECT @OutValue=MyIntField FROM MyTable WHERE MyPrimaryKeyField = @Param
RETURN 0
GO
und jetzt rufen Sie Ihre Prozedur wie folgt auf:
DECLARE @SelectedValue int
,@Param int
SET @Param=1
EXEC GetMyInt @Param, @SelectedValue OUTPUT
PRINT @SelectedValue
Ausgabeparameter können nur einen Wert zurückgeben, können jedoch einen beliebigen Datentyp haben
ERGEBNIS-SET
für eine Ergebnismenge gehen Sie wie folgt vor :
CREATE PROCEDURE GetMyInt
( @Param int)
AS
SELECT MyIntField FROM MyTable WHERE MyPrimaryKeyField = @Param
RETURN 0
GO
benutze es wie:
DECLARE @ResultSet table (SelectedValue int)
DECLARE @Param int
SET @Param=1
INSERT INTO @ResultSet (SelectedValue)
EXEC GetMyInt @Param
SELECT * FROM @ResultSet
Ergebnismengen können viele Zeilen und viele Spalten eines beliebigen Datentyps enthalten