Как вызвать хранимую процедуру и вернуть значение? - PullRequest
6 голосов
/ 30 декабря 2010

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

CREATE PROCEDURE rnd_STR
(
    @Length int

)

@alphaVar varchar(10) OUTPUT
AS
SET @alphaVar = 'blah'

 #procedure body
END
GO

DECLARE @alphaVar varchar(10)

EXEC rnd_STR @alphaVar output

SELECT @alphaVar

ОШИБКИ

Сообщение 102, уровень 15, состояние 1, процедура rnd_STR, строка 6

Неверный синтаксис рядом с'@alphaVar'.

Сообщение 137, уровень 15, состояние1, процедура rnd_STR, строка 8

Необходимо объявить скалярную переменную "@alphaVar".

Сообщение 2812, уровень 16, состояние 62, строка 4

Не удалось найти сохраненныйпроцедура 'rnd_STR'.

(затронуты 1 строка)

не работает !!

Как я могу это назвать ??

Кстати, возвращенный @ID является строкой

Ответы [ 4 ]

15 голосов
/ 30 декабря 2010

Вы говорите, @alphaVar - это varchar(10).В этом случае вам нужно использовать выходной параметр, как показано ниже.Return может использоваться только для целочисленных типов в хранимых процедурах.

CREATE PROCEDURE rnd_STR
@Length int,
@alphaVar varchar(10) OUTPUT    
AS
BEGIN
SET @alphaVar = 'blah'
/* Rest of procedure body*/
END

GO

DECLARE @alphaVar varchar(10) 

EXEC rnd_STR 10, @alphaVar output

SELECT @alphaVar

В качестве альтернативы вы можете использовать скалярный UDF вместо хранимой процедуры.

9 голосов
/ 30 декабря 2010

Вы используете неправильный синтаксис.

 DECLARE @newId int
 EXEC @newId = rnd_STR, @length = 10

См. ВЫПОЛНИТЬ в справочнике.

0 голосов
/ 13 мая 2013

Чтобы получить этот код, нужно выполнить хранимую процедуру в самом Management Studio и скопировать код SQL

.
0 голосов
/ 30 декабря 2010

Попробуйте это:

EXEC @alphaVar = rnd_STR 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...