Подтвердить что ты не робот

Как вернуть вывод хранимой процедуры в переменную в sql-сервере

Я хочу выполнить хранимую процедуру в SQL Server и назначить вывод переменной (она возвращает одно значение)?

4b9b3361

Ответ 1

Это зависит от характера информации, которую вы хотите вернуть.

Если это одно целое значение, вы можете использовать оператор return

 create proc myproc
 as 
 begin
     return 1
 end
 go
 declare @i int
 exec @i = myproc

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

create proc myproc
  @a int output,
  @b varchar(50) output
as
begin
  select @a = 1, @b='hello'
end
go
declare @i int, @j varchar(50)
exec myproc @i output, @j output

Если вы хотите вернуть набор данных, вы можете использовать insert exec

create proc myproc
as 
begin
     select name from sysobjects
end
go

declare @t table (name varchar(100))
insert @t (name)
exec myproc

Вы даже можете вернуть курсор, но это просто ужасно, поэтому я не буду приводить пример:)

Ответ 2

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

Если no return явно задано, то хранимая процедура возвращает ноль.

   CREATE PROCEDURE GetImmediateManager
      @employeeID INT,
      @managerID INT OUTPUT
   AS
   BEGIN
     SELECT @managerID = ManagerID 
     FROM HumanResources.Employee 
     WHERE EmployeeID = @employeeID

     if @@rowcount = 0 -- manager not found?
       return 1;
   END

И вы называете это так:

DECLARE @return_status int;
DECLARE @managerID int;

EXEC @return_status = GetImmediateManager 2, @managerID output;
if @return_status = 1
  print N'Immediate manager not found!';
else 
  print N'ManagerID is ' + @managerID;
go

Вы должны использовать возвращаемое значение только для кодов состояния. Чтобы вернуть данные, вы должны использовать выходные параметры.

Если вы хотите вернуть набор данных, используйте выходной параметр типа cursor.

больше в инструкции RETURN

Ответ 3

Используйте этот код, работая правильно

CREATE PROCEDURE [dbo].[sp_delete_item]
@ItemId int = 0
@status bit OUT

AS
Begin
 DECLARE @cnt int;
 DECLARE @status int =0;
 SET NOCOUNT OFF
 SELECT @cnt =COUNT(Id) from ItemTransaction where ItemId = @ItemId
 if(@cnt = 1)
   Begin
     return @status;
   End
 else
  Begin
   SET @status =1;
    return @status;
 End
END

Выполнить SP

DECLARE @statuss bit;
EXECUTE  [dbo].[sp_delete_item] 6, @statuss output;
PRINT @statuss;