gibt es drei Möglichkeiten, die Sie verwenden können: Der Rückgabewert, und OUTPUT-Parameter und eine Ergebnismenge
AUCH, achten Sie, wenn Sie Verwenden Sie das Muster: SELECT @Variable=column FROM table ...
Wenn mehrere Zeilen von der Abfrage zurückgegeben werden, enthält Ihre @Variable nur den Wert aus der letzten von der Abfrage zurückgegebenen Zeile.
UCKGABEWERT
da die Abfrage ein int Feld zurückgibt, zumindest auf, wie Sie es genannt. Sie können diesen Trick anwenden:
CREATE PROCEDURE GetMyInt
(@Param int)
AS
DECLARE @ReturnValue int
SELECT @ReturnValue=MyIntField FROM MyTable WHERE MyPrimaryKeyField = @Param
RETURN @ReturnValue
GO
und jetzt Ihr Verfahren wie nennen:
DECLARE @SelectedValue int
,@Param int
SET @Param=1
EXEC @SelectedValue = GetMyInt @Param
PRINT @SelectedValue
dies nur für INTs funktionieren wird, weil RETURN nur einen einzigen int-Wert und Nullen zurückkehren kann auf einen Null umgewandelt werden .
Ausgabeparameter
können Sie 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 Ihr Verfahren wie nennen:
DECLARE @SelectedValue int
,@Param int
SET @Param=1
EXEC GetMyInt @Param, @SelectedValue OUTPUT
PRINT @SelectedValue
Ausgangsparameter nur einen Wert zurückgeben kann, kann aber beliebig sein Datentyp
ERGEBNIS SET für eine Ergebnismenge machen das Verfahren wie:
CREATE PROCEDURE GetMyInt
(@Param int)
AS
SELECT MyIntField FROM MyTable WHERE MyPrimaryKeyField = @Param
RETURN 0
GO
es gerne verwenden:
DECLARE @ResultSet table (SelectedValue int)
DECLARE @Param int
SET @Param=1
INSERT INTO @ResultSet (SelectedValue)
EXEC GetMyInt @Param
SELECT * FROM @ResultSet
Ergebnismengen viele Reihen und viele Spalten eines beliebigen Datentyps
Es scheint Art schwer die beste Antwort zu wählen, wenn mehrere Ihre Frage wie gefragt beantworten. Ich habe die detaillierteste hier gewählt. Vielen Dank. – David