Adh*_*ham 57 sql sql-server variables stored-procedures
我想在SQL Server中执行存储过程并将输出分配给变量(它返回单个值)?
pod*_*ska 117
这取决于您想要返回的信息的性质.
如果它是单个整数值,则可以使用该return语句
create proc myproc
as
begin
return 1
end
go
declare @i int
exec @i = myproc
Run Code Online (Sandbox Code Playgroud)
如果您有非整数值或多个标量值,则可以使用输出参数
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
Run Code Online (Sandbox Code Playgroud)
如果要返回数据集,可以使用 insert exec
create proc myproc
as
begin
select name from sysobjects
end
go
declare @t table (name varchar(100))
insert @t (name)
exec myproc
Run Code Online (Sandbox Code Playgroud)
你甚至可以返回一个光标但是这很可怕所以我不会给出一个例子:)
Jos*_*tos 10
您可以使用return存储过程中的语句来返回整数状态代码(并且只返回整数类型).按照惯例,返回值为零用于成功.
如果未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
Run Code Online (Sandbox Code Playgroud)
你这么称呼它:
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
Run Code Online (Sandbox Code Playgroud)
您应该仅使用状态代码的返回值.要返回数据,您应该使用输出参数.
如果要返回数据集,请使用类型的输出参数cursor.
小智 5
使用此代码,正常工作
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
Run Code Online (Sandbox Code Playgroud)
执行 SP
DECLARE @statuss bit;
EXECUTE [dbo].[sp_delete_item] 6, @statuss output;
PRINT @statuss;
Run Code Online (Sandbox Code Playgroud)