można użyć trzech sposobów: wartości POWRÓT, parametru WYJŚCIE i zestawu wyników
RÓWNIEŻ uważaj jeśli używasz wzoru: SELECT @Variable=column FROM table ...
jeśli zapytanie zwraca wiele wierszy, twoja @Variable będzie zawierała tylko wartość z ostatniego wiersza zwróconego przez zapytanie.
WARTOŚĆ ZWRACANA,
ponieważ zapytanie zwraca pole typu int, przynajmniej w oparciu o jego nazwę. możesz użyć tej sztuczki:
CREATE PROCEDURE GetMyInt
( @Param int)
AS
DECLARE @ReturnValue int
SELECT @ReturnValue=MyIntField FROM MyTable WHERE MyPrimaryKeyField = @Param
RETURN @ReturnValue
GO
a teraz wywołaj swoją procedurę w następujący sposób:
DECLARE @SelectedValue int
,@Param int
SET @Param=1
EXEC @SelectedValue = GetMyInt @Param
PRINT @SelectedValue
zadziała to tylko dla INT, ponieważ RETURN może zwrócić tylko jedną wartość int, a wartości null są konwertowane na zero.
PARAMETR WYJŚCIOWY
można użyć parametru wyjściowego:
CREATE PROCEDURE GetMyInt
( @Param int
,@OutValue int OUTPUT)
AS
SELECT @OutValue=MyIntField FROM MyTable WHERE MyPrimaryKeyField = @Param
RETURN 0
GO
a teraz wywołaj swoją procedurę w następujący sposób:
DECLARE @SelectedValue int
,@Param int
SET @Param=1
EXEC GetMyInt @Param, @SelectedValue OUTPUT
PRINT @SelectedValue
Parametry wyjściowe mogą zwracać tylko jedną wartość, ale mogą być danymi dowolnego typu
RESULT SET
dla zestawu wynikowego wykonaj procedurę:
CREATE PROCEDURE GetMyInt
( @Param int)
AS
SELECT MyIntField FROM MyTable WHERE MyPrimaryKeyField = @Param
RETURN 0
GO
użyj go jak:
DECLARE @ResultSet table (SelectedValue int)
DECLARE @Param int
SET @Param=1
INSERT INTO @ResultSet (SelectedValue)
EXEC GetMyInt @Param
SELECT * FROM @ResultSet
zestawy wyników mogą mieć wiele wierszy i wiele kolumn dowolnego typu danych