Web/GoLang

[MSSQL] [Golang] 프로시저 내부에 다중 select 이슈

벨포트조던 2021. 7. 14.
반응형

문제점 

- 사용하고 있는 프로시저(A) 안에 다른 프로시저(B)를 호출하고 있음.  B프로시저에서 select 문이 존재함

- 해당 (A)프로시저 실행시 이렇게 결과가 두개가 나오게 됨 ( select 문 때문에 )

- 이 경우에 닷넷에서는 마지막 결과값인 return value를 받아오는데, golang 에서는 첫번째인 0 값을 가져옴 

( 확실하지 않지만 결과상으로는 닷넷에서는 마지막을 본다고 생각됨 ) 

- 원하는건 golang에서 return value를 가져오고 싶음

- golang 코드로는 해결 불가능 하다고 결론 

 

해결법 

1. golang 코드상으로는 해결이 안된다고 판단. 결론적으로는 프로시저를 수정해야 함

2. B프로시저는 공통으로 사용하고있어 변경하기가 조금 부담

3. 아래 참고를 바탕으로, 임시테이블, 테이블변수로 해결이 되었다

 

1.선언
선언은 table로 하면 됩니다.
Declare @Table table
( nIndex int
	, sName varchar(16)
	, sID varchar(16))


2.입력
입력은 인서트(Insert)를 이용하면 됩니다.

Insert @Table Select *
	From tb_WebServiceTest
	Where intIndex = 45

이렇게 하면 셀랙트의 결과가 테이블 변수로 들어가게 되죠.

테이블 변수 만들어서 select 문을 테이블 변수에 초기화 

 

4. 이렇게 하면 select 문이 출력되지 않음 

 

...

... 

뭔가 편법같긴한데... 프로시저를 최소한으로 수정하다보니 이렇게 밖에 안될듯 ..

 

 

 

 

참고

https://blog.danggun.net/1026

 

[MSSQL] 저장프로시저 안에서 저장프로시저를 호출했을때 결과값이 여러개 나온다면?

저장프로시저를 호출하던 안하던 결과가 여러개 나온다는 것은 Select문이 여러번 동작한다는 의미 입니다. Select로 리턴하는 값을 Return으로 바꾸면 됩니다. 셀랙트(Select)는 리턴(Return)과 달라 프

blog.danggun.net

https://blog.danggun.net/1036

 

[MSSQL] 저장프로시저에서 임시 테이블 사용하기

이전 글에서 테이블변수에 대해서 이야기를 했었습니다. 임시테이블과 테이블변수는 사용하는 방법면에서는 별차이가 없으나 성능상 차이가 있다고 합니다. 테이블 변수가 성능면에서 더 유리

blog.danggun.net

https://blog.danggun.net/1034

 

[MSSQL] 저장프로시저에서 테이블(Table) 변수 사용하기

테이블 변수라는 것은 변수로 선언된 테이블을 말합니다. 셀랙트(Select)하여 받아온 데이터를 저장프로시저에서 처리할때 사용합니다. 1.선언 선언은 table로 하면 됩니다. Declare @Table table ( nIndex

blog.danggun.net

 

반응형

댓글