Ответ 1
существует три способа использования: значение 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, а нули преобразуются в ноль.
ПАРАМЕТР ВЫХОДА
вы можете использовать выходной параметр:
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
Выходные параметры могут возвращать только одно значение, но могут быть любыми типами данных
SET RESULT для набора результатов выполните следующую процедуру:
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
наборы результатов могут иметь много строк и много столбцов любого типа данных