Есть три способа, которые можно использовать: Возвращаемое значение, и выходной параметр и результирующий набор
ТАКЖЕ, посмотреть, если вы используйте шаблон: SELECT @Variable=column FROM table ...
Если в запросе есть несколько строк, то ваш @Variable будет содержать только значение из последней строки, возвращаемой запросом.
ВОЗВРАТ СТОИМОСТИ
, поскольку ваш запрос возвращает поле целого типа, по крайней мере, на основе того, как вы назвали его. Вы можете использовать этот трюк:
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 ПАРАМЕТР
вы можете использовать выходной параметр:
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
результирующие наборы могут иметь множество строк и множество столбцов данных любого типа
Кажется, вид трудно выбрать «лучший» ответ, когда несколько ответят на ваш вопрос, как было задано. Я выбрал наиболее подробный здесь. Благодарю. – David