Попробуйте что-нибудь подобное
CREATE PROCEDURE Test
@RetVal INT OUT
AS
BEGIN
SET @RetVal = 99
END
DECLARE @X INT
EXEC Test @X OUT
PRINT @X
Редактировать : [комментарий после публикации рассматриваемого фрагмента T-SQL]
Кажется, вам нужна оболочка вокруг хранимой процедуры spGetNthNo, возможно, потому что эта существующая процедура не возвращает желаемый результат. Альтернативой обёртке может быть просто модифицировать [очень немного] сам spGetNthNo, поэтому он, во-первых, работает как нужно (при условии, что метод в настоящее время не используется с существующим API).
Независимо от того, будут ли изменения в исходном SP или в обертке, есть два различных способа получения данных из SP:
- С выходными переменными (как показано выше)
- Если SP возвращает «набор записей», то есть таблицу, состоящую из строк (записей) и столбцов (полей). (Это делается с помощью инструкции SELECT в конце SP, как показано во фрагменте вопроса)
При использовании метода выходных переменных данные легко помещаются в переменные ко времени возврата SP. При использовании набора записей логике вызова необходимо «потреблять» возвращаемые данные аналогично тому, как это делается в операторе SELECT.
Помимо способа использования возвращаемых данных, есть несколько различий между этими подходами .
Наиболее очевидный из них заключается в том, что подход «набор записей» позволяет возвращать больше значений : нужно было бы явно объявить, скажем, 30 переменных (с некоторым соглашением об именах, направленным на помощь с двумерным характером таблицы) эмулировать возврат SP, который "ВЫБЕРИТЕ ТОП 10 a, b, c ИЗ myTable". Также SP должен был бы явно установить каждую из этих выходных переменных.
Другое связанное, но более тонкое отличие состоит в том, что подход набора записей позволяет возвращать количество строк и столбцов, которое не определено во время вызова . Число и типы переменных не нужно указывать заранее, скорее они поставляются с метаданными, окружающими набор записей.
Вкратце : подход с использованием выходных переменных больше подходит для возврата фиксированного набора из нескольких переменных, таких как код состояния, максимальное или минимальное значение (или другие совокупные значения и вычисления), а также, несколько полей из одной ожидаемой записи. Подход Recordset используется, когда целью хранимой процедуры является эффективное предоставление табличного результата или когда он возвращает очень много значений, таких как длинный [и развивающийся] список совокупных значений и т. Д.