안녕하세요.
프로시저 생성을 하다보니 해결이 안되는 부분이 있어 도움을 받으려고 글을 남기게 되었습니다.
1. 링크드 서버로 다른(외부 MSSQL)서버의 프로시저를 사용하고 있습니다.
두개의 프로시저를 제공받고 있는데
첫번째
exec sp_test1 '1'
결과값은 'test'
두번째
exec sp_test2 'test'
결과값은 'a', 'b', 'c', d'
이런 형식의 프로시저입니다.
1번 프로시저를 실행한 결과값을 2번 프로시저에 인자값으로 넘겨 호출하게 되면 여러 컬럼의 데이터를 반환합니다.
두가지 프로시저를 따로 따로 사용하다 그럴 필요가 없어져 하나로 통합하여 사용하려 하다보니
문제가 생겼습니다.
1번째 프로시저
exec 링크드서버명.데이터베이스명.소유자.SP_test1 @Option
2번째 프로시저
exec 링크드서버명.데이터베이스명.소유자.SP_test2 @Option
신규 프로시저
CREATE PROCEDURE New_Procedure
@option as varchar(20)
)
AS
BEGIN
declare @option2 as varchar(20)
exec @option2 = 링크드서버명.데이터베이스명.소유자.SP_test1 @option
exec 링크드서버명.데이터베이스명.소유자.SP_test2 @option2
END
위와 같이 생성하여 실행 시켰을때
마지막 결과값만 반화되는걸로 알고 있었는데 실 결과는
아래와 같이 두 개의 행이 나오게 됩니다.
첫번째 프로시저 결과와 두번째 프로시저 결과가 순차적으로 표시가 되는것인데 마지막 결과값만 보여줄수 있을까요?
현재 링크드 서버에 있는 프로시저는 저말고 다른곳에서도 사용하고 있는 중이라 변경이 불가한 점 찹고 부탁드리며
고수분들의 도움의 손길을 기다리고 있겠습니다.
감사합니다.
Comment 4
-
이리
2017.05.18 03:58
-
상아미
2017.05.19 22:27
답변 감사드립니다.
테이블 변수 또는 임시테이블에 insert @table exec 링크드서버명.데이터베이스명.소유자.SP_test2 @option2
위의 쿼리로 변경하여 진행하였으나 이번엔 하기 에러 메시지가 나타나네요.
연결된 서버 "TEST"의 OLE DB 공급자 "SQLNCLI11"이(가) 메시지 "파트너 트랜잭션 관리자가 원격/네트워크 트랜잭션에 대한 지원을 할 수 없습니다."을(를) 반환했습니다.
메시지 7391, 수준 16, 상태 2, 줄 13
연결된 서버 "TEST"의 OLE DB 공급자 "SQLNCLI11"이(가) 분산 트랜잭션을 시작할 수 없으므로 요청한 작업을 수행할 수 없습니다.
DTC 설정부터 인터넷 검색을 통해 찾은 방법은 다 해보았으나 아직 해결이 되지 않고 있네요....ㅠㅠ -
건우아빠
2017.05.20 19:22
-
건우아빠
2017.05.20 19:25
create table test
( option varchar(10)
insert into test
exec exec 링크드서버명.데이터베이스명.소유자.SP_test1 @Option
select @option2 option from test
exec 링크드서버명.데이터베이스명.소유자.SP_test2 @option2
첫번째 프로시저에서 OUTPUT으로 받아올수 있으면 좋으나 수정이 힘들다고 하시면
새로운 프로시저에서 변수가 아니라 테이블변수 혹은 임시테이블에 값을 받아서 변수에 할당하는 방식으로 하시면 될 거 같습니다.