저장 프로시저(stored procedure) 안에서 다른 저장 프로시저를 호출하려면 크게 보자면 2가지 방법이 있습니다.
Exec(EXECUTE)나 sp_executesql를 이용하면 됩니다.
( 참고 : MSDN - sp_executesql 사용)
여기서는 Exec(EXECUTE)를 이용하는 방법을 설명하겠습니다.
1. 리턴값이 없을 때
리턴값이 없으면 그냥 호출하면 됩니다.
--Exec [저장프로시저 이름]
--Exec [저장프로시저 이름] [매개변수1],[매개변수2],....
Exec TestSelect @temp
2. 리턴값이 있을 때
리턴값은 항상 int형이므로 인티저형의 변수를 하나 선언한 후 값을 대입하는 방식으로 받습니다.
--Exec [값을 받을 변수] = [저장프로시저 이름] [매개변수1],[매개변수2],....
Declare @nTemp int
Exec @nTemp = TestSelect @temp
3. 셀랙트(Select)값이 있을 때
셀랙트로 값을 받아올 때는 임시테이블이나 테이블 변수를 사용하면 됩니다.
임시테이블보다는 테이블 변수를 사용한 방법이 좋습니다.
( 참고 : [MSSQL] 저장프로시저에서 테이블(Table) 변수 사용하기 )
이런 식으로 셀랙트 값을 받을 수 있습니다.
--임시테이블
Declare @tableTemp table
( sTemp varchar(32))
Insert @tableTemp exec [저장프로시저 이름] [매개변수1],[매개변수2]
[출처] : blog.danggun.net/1255
========================================
-- 1번 프로시져
CREATE PROCEDURE dbo.P_Stat (
@IN_X_Seq int
,@OP_A varchar(10) OUTPUT
,@OP_B int OUTPUT
)
AS
Begin
SET @OP_A = 'test'
SET @OP_B = 5
RETURN
End
GO
========================================
-- 2번 프로시져. 1번을 호출
CREATE PROCEDURE dbo.P_Order (
@IN_X_Seq int
)
AS
Begin
Declare @OP_A varchar(10)
Declare @OP_B int
-- 프로시져를 실행해서 반환값을 반환받습니다.
--실행하실때 output 데이터를 받을 변수를 같이 넣어주시면 됩니다.
--그리고 담아진 변수값을 print로 찍어보시면 되구요.
EXEC P_Stat @IN_X_Seq = @IN_X_Seq , @OP_A output, @OP_B output
print @OP_A
print @OP_B
End
GO
'프로그래밍 > DB' 카테고리의 다른 글
DBeaver 각종 DB 드라이버 셋팅 되지 않아서 연결 안될때 (0) | 2023.06.05 |
---|---|
MSSQL MDF, LDF SHRINK 파일 용량 줄이기 (0) | 2021.03.04 |
ORACLE / MSSQL 같은 내용 비교 (0) | 2020.10.22 |
MSSQL 탭, 엔터 등 치환 하기 (0) | 2019.09.16 |
MSSQL 시퀀스 정렬해서 다시 넣기 쿼리 (1) | 2019.07.31 |