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
Istnieje również kombinacja, możesz użyć wartości zwracanej z zestawem rekordów:
--Procedura składowana--
CREATE PROCEDURE [TestProc] AS BEGIN DECLARE @Temp TABLE ( [Name] VARCHAR(50) ) INSERT INTO @Temp VALUES ('Mark') INSERT INTO @Temp VALUES ('John') INSERT INTO @Temp VALUES ('Jane') INSERT INTO @Temp VALUES ('Mary') -- Get recordset SELECT * FROM @Temp DECLARE @ReturnValue INT SELECT @ReturnValue = COUNT([Name]) FROM @Temp -- Return count RETURN @ReturnValue END
- Kod wywoławczy -
DECLARE @SelectedValue int EXEC @SelectedValue = [TestProc] SELECT @SelectedValue
--Wyniki--
źródło
Musisz użyć wartości zwracanych.
DECLARE @SelectedValue int CREATE PROCEDURE GetMyInt (@MyIntField int OUTPUT) AS SELECT @MyIntField = MyIntField FROM MyTable WHERE MyPrimaryKeyField = 1
Następnie nazywasz to tak:
źródło
Spróbuj to zrobić:
źródło