code

저장 프로시저의 출력을 sql server의 변수로 되돌리는 방법

starcafe 2023. 6. 2. 20:40
반응형

저장 프로시저의 출력을 sql server의 변수로 되돌리는 방법

SQL Server에서 저장 프로시저를 실행하고 출력을 변수에 할당합니다(단일 값을 반환함)?

이는 반환할 정보의 특성에 따라 다릅니다.

단일 정수 값인 경우 다음을 사용할 수 있습니다.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

당신은 심지어 커서를 돌려줄 수도 있지만 그것은 끔찍하기 때문에 예를 들어 설명하지 않겠습니다 :)

사용할 수 있습니다.return정수 상태 코드(및 정수 유형만)를 반환하는 저장 프로시저 내부의 문입니다.관례에 따라 반환 값 0은 성공에 사용됩니다.

안되면return이 명시적으로 설정되면 저장 프로시저가 0을 반환합니다.

   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.

반품에 관한 더 많은 정보

이 코드를 사용하여 올바르게 작동합니다.

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;

proc의 Return 문을 사용하여 temp 변수를 할당하고 다른 저장 프로시저에 전달해야 했습니다.값이 정상적으로 할당되었지만 매개 변수로 전달할 때 값이 손실되었습니다.임시 테이블을 생성하고 테이블에서 변수를 설정해야 했습니다(SQL 2008).

From this: 
declare @anID int
exec @anID = dbo.StoredProc_Fetch @ID, @anotherID, @finalID
exec dbo.ADifferentStoredProc @anID (no value here)

To this:
declare @t table(id int) 
declare @anID int
insert into @t exec dbo.StoredProc_Fetch @ID, @anotherID, @finalID
set @anID= (select Top 1 * from @t)

언급URL : https://stackoverflow.com/questions/11965269/how-to-return-the-output-of-stored-procedure-into-a-variable-in-sql-server

반응형