Как использовать возвращаемое значение хранимой процедуры в операторе вставки? - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть хранимая процедура, такая как

CREATE PROCEDURE GetSerial (@param1 int, @param2 int)
AS
BEGIN
    -- do some insert/updates, so I can't use function
    DECLARE @value AS int;
    SET @value = 3;
    return @value;
END

Теперь я объявляю переменную таблицы

DECLARE @Serials AS TABLE 
(
   ID int,
   Value int
)

Теперь я хочу заполнить эту таблицу как

INSERT INTO @Serials (ID, Value)
SELECT 1, GetSerial(1,2) -- *How can I call this?

ТакКто-нибудь может мне помочь, как я могу вызвать хранимую процедуру GetSerial внутри инструкции SELECT, чтобы заполнить мою таблицу?

1 Ответ

0 голосов
/ 03 декабря 2018

Я рекомендую вам не вдаваться в этот паттерн / мышление, потому что хранимые процедуры возвращают только INT, и эти int действительно предназначены для описания того, насколько хорошо прошла операция, а не результата / данных от операции.Пример: 0 => не удалось, 1 => успешно.Не GetAgeInYears () => 29

https://docs.microsoft.com/en-us/sql/relational-databases/stored-procedures/return-data-from-a-stored-procedure?view=sql-server-2017 имеет много информации и конкретных примеров, но в вашем конкретном случае вам нужно выполнить процедуру и записать код результата в переменную, а затем вставитьчто:

DECLARE @ret INT;
EXEC @ret = GetSerial(1,2);
INSERT INTO @Serials VALUES(1, @ret);

Действительно, вам лучше использовать выходной параметр или набор результатов, если у вас есть много значений для возврата.Смотрите выше ссылку для более

...