Невозможно установить возвращаемое значение в переменной в SQL Proc - PullRequest
0 голосов
/ 05 февраля 2010

Я создал простой хранимый процесс, который возвращает строку

create proc im.mmtest as 
select 'testvalue'
go

тогда я вызываю SP и устанавливаю его возвращаемое значение переменной. Этот блок выполняется путем выбора всех трех строк и нажатия клавиши F5. Я вижу значение при выполнении оператора exec, но не возвращаю строковое значение обратно в select @ret_var.

Пожалуйста, помогите мне понять, почему. Я использую это в сложном SP и не знаю, почему значение из SP отображается неправильно.

declare @ret_var as varchar(10)
exec @ret_var =  im.mmtest
select @ret_var

Заранее благодарю за помощь.

Ответы [ 3 ]

1 голос
/ 05 февраля 2010

Вы не возвращаете возвращаемое значение (что вам нужно сделать, используя оператор RETURN , который в любом случае поддерживает только целые числа), а набор результатов. Попробуйте вместо этого параметр вывода:

create proc im.mmtest 
    @OutVal VARCHAR(10) OUTPUT
as 
select @OutVal = 'testvalue' 
go

и затем назовите это так:

DECLARE @Val VARCHAR(10)
EXECUTE im.mmtest @Val OUTPUT
SELECT @Val

Синтаксис для возвращаемого значения (которое ДОЛЖНО быть числовым):

RETURN(1) -- RETURN value 1

Синтаксис, который вы используете в данный момент, получит это возвращаемое значение. Но вы не можете сделать это с чем-то нечисловым, поэтому лучше всего использовать параметр OUTPUT.

0 голосов
/ 05 февраля 2010

Возвращает значение varchar в выходном параметре процесса.

CREATE PROC im.mmtest (@retVal varchar(10) OUTPUT) AS
  SELECT @retVal = 'testvalue'
GO

... затем получите значение из SP следующим образом:

DECLARE @ret_var varchar(10)
EXEC im.mmtest(@ret_var)
SELECT @ret_var
0 голосов
/ 05 февраля 2010
create proc im.mmtest as 
select 'testvalue'
RETURN 99 --insert value here
go

Возвращаемое значение устанавливается RETURN и всегда является целым числом

SELECT, как это вернет набор записей. здесь один столбец и одна строка

Возможно, вам нужен выходной параметр

create proc im.mmtest
  @foo varchar(100) OUTPUT
as 
select @foo = 'testvalue'
go

DECLARE @bar varchar(100)
EXEC im.mmtest @bar OUTPUT
SELECT @bar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...