복붙노트

[SQL] SQL 서버에서 변수로 저장 프로 시저의 출력을 반환하는 방법

SQL

SQL 서버에서 변수로 저장 프로 시저의 출력을 반환하는 방법

나는 SQL Server의 저장 프로 시저를 실행하고 변수 (이 단일 값을 반환) 출력을 할당 할?

해결법

  1. ==============================

    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
    

    데이터 집합을 반환하려는 경우, 당신은 삽입 간부를 사용할 수 있습니다

    create proc myproc
    as 
    begin
         select name from sysobjects
    end
    go
    
    declare @t table (name varchar(100))
    insert @t (name)
    exec myproc
    

    당신은 커서를 반환 할 수 있지만, 내가 예를 들어 줄 수 없다, 그래서 그건 그냥 무서운 것 :)

  2. ==============================

    2.당신은 (만 정수형의) 정수 상태 코드를 반환하는 저장 프로 시저 내에서 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
    

    당신은 상태 코드에만 반환 값을 사용해야합니다. 데이터를 반환하려면 출력 매개 변수를 사용해야합니다.

    당신이 데이터 집합을 반환 할 경우, 입력 한 다음 커서의 출력 매개 변수를 사용합니다.

    RETURN 문에 대한 자세한

  3. ==============================

    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;
    
  4. ==============================

    4.proc 디렉토리에서 return 문으로, 나는 임시 변수를 할당하고 다른 저장 프로 시저에 전달할 필요가 있었다. 값은 벌금을 할당하지만 매개 변수로 전달할 때, 그것은 가치를 잃어버린했다. 나는 (2008 SQL) 임시 테이블을 작성했고 테이블에서 변수를 설정

    proc 디렉토리에서 return 문으로, 나는 임시 변수를 할당하고 다른 저장 프로 시저에 전달할 필요가 있었다. 값은 벌금을 할당하지만 매개 변수로 전달할 때, 그것은 가치를 잃어버린했다. 나는 (2008 SQL) 임시 테이블을 작성했고 테이블에서 변수를 설정

    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)
    
  5. from https://stackoverflow.com/questions/11965269/how-to-return-the-output-of-stored-procedure-into-a-variable-in-sql-server by cc-by-sa and MIT license