Почему я должен использовать хранимую процедуру без параметра? - PullRequest
0 голосов
/ 27 января 2020

Хранимая процедура без выходного параметра:

CREATE PROCEDURE Getstudentname
    (@studentid INT   -- Input parameter, Studentid of the student
    )
AS
BEGIN
    SELECT Firstname + ' ' + Lastname 
    FROM tbl_Students 
    WHERE studentid = @studentid
END

Я выполнил вышеописанную хранимую процедуру:

exec Getstudentname 2

Результат: Pankaj Kumar

где как хранимая процедура с выходной параметр:

CREATE PROCEDURE GetstudentnameInOutputVariable
    (@studentid INT,                 -- Input parameter, Studentid of the student
     @studentname VARCHAR(200) OUT   -- Out parameter declared with the help of OUT keyword
    )
AS
BEGIN
    SELECT @studentname = Firstname + ' ' + Lastname 
    FROM tbl_Students 
    WHERE studentid = @studentid
END

Я выполнил эту хранимую процедуру:

DECLARE @return_value int

EXEC @return_value = [dbo].[Getstudentname]
                           @studentid = 2

SELECT 'Return Value' = @return_value

GO

Результат: Pankaj Kumar

Ответы [ 2 ]

0 голосов
/ 27 января 2020

Правильный способ выполнения GetstudentnameInOutputVariable

DECLARE @return_value VARCHAR(200)

EXEC  [dbo].[Getstudentname] 2,@return_value OUTPUT

SELECT 'Return Value' = @return_value

GO

Может быть несколько сценариев, в которых вы можете использовать OUTPUT параметр, ваш пример, похоже, не является одним из них.

Когда ваш профи c возвращает одно значение, которое обычно указывает на флаг.

Как и в вашем примере,

SELECT @studentname = Firstname + ' ' + Lastname FROM tbl_Students

Мне может понадобиться выбрать несколько столбцов из tbl_Students, поэтому столбец output не идеален.

Допустим, у меня есть pro c, который выполняет операции DML, а в приложении переднего плана, например, c# Я хочу, чтобы только флаг знал, если данный pro c успешно выполнено или произошел сбой проверки или произошла ошибка, мне нужно знать только флаг Pass/Fail, и я буду выполнять работу на основе флага.

Когда вы делаете DML operation только тогда, ExecuteNonQuery - лучший выбор. , Output paramter лучше всего работает с EXecuteNonQuery.

Таким образом, вы должны использовать Output parameter в этой ситуации.

Другая ситуация, когда вы выполняете одно про c и вам нужен 1 или 2 результат этого pro c для работы в вызове pro c.

Тогда это очень удобный способ.

Вы также можете возвращать набор результатов, но для отлова набора результатов вам нужно создать временную немного громоздко.

Вывод: это зависит от вашей реальной ситуации.

0 голосов
/ 27 января 2020

Ваша процедура не может select ничего. Ваш параметр OUT может, например, хранить количество строк, вставленных в программно созданную таблицу. Этот вывод затем может быть вводом для последующего EXEC.

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