Я хочу выполнить хранимую процедуру в SQL Server и назначить вывод переменной (она возвращает одно значение)?
Как вернуть вывод хранимой процедуры в переменную в sql-сервере
Ответ 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
.
Ответ 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;