можно использовать три способа: значение RETURN, параметр OUTPUT и набор результатов.
ТАКЖЕ, будьте осторожны, если вы используете шаблон: SELECT @Variable=column FROM table ...
если из запроса возвращено несколько строк, ваша @Variable будет содержать только значение из последней строки, возвращенной запросом.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ,
поскольку ваш запрос возвращает поле типа int, по крайней мере, в зависимости от того, как вы его назвали. вы можете использовать этот трюк:
CREATE PROCEDURE GetMyInt
( @Param int)
AS
DECLARE @ReturnValue int
SELECT @ReturnValue=MyIntField FROM MyTable WHERE MyPrimaryKeyField = @Param
RETURN @ReturnValue
GO
а теперь вызовите свою процедуру, например:
DECLARE @SelectedValue int
,@Param int
SET @Param=1
EXEC @SelectedValue = GetMyInt @Param
PRINT @SelectedValue
это будет работать только для INT, потому что RETURN может возвращать только одно значение int, а нули преобразуются в ноль.
OUTPUT PARAMETER
вы можете использовать выходной параметр:
CREATE PROCEDURE GetMyInt
( @Param int
,@OutValue int OUTPUT)
AS
SELECT @OutValue=MyIntField FROM MyTable WHERE MyPrimaryKeyField = @Param
RETURN 0
GO
а теперь вызовите свою процедуру, например:
DECLARE @SelectedValue int
,@Param int
SET @Param=1
EXEC GetMyInt @Param, @SelectedValue OUTPUT
PRINT @SelectedValue
Выходные параметры могут возвращать только одно значение, но могут иметь любой тип данных
НАБОР РЕЗУЛЬТАТОВ
для набора результатов выполните следующую процедуру:
CREATE PROCEDURE GetMyInt
( @Param int)
AS
SELECT MyIntField FROM MyTable WHERE MyPrimaryKeyField = @Param
RETURN 0
GO
используйте это как:
DECLARE @ResultSet table (SelectedValue int)
DECLARE @Param int
SET @Param=1
INSERT INTO @ResultSet (SelectedValue)
EXEC GetMyInt @Param
SELECT * FROM @ResultSet
наборы результатов могут иметь много строк и много столбцов любого типа данных