프로시저를 뷰로 만들기 0 2 2,130

by 가을에사랑 [SQL Query] 프로시저 [2019.05.23 09:43:50]


데이터베이스는 MS SQL입니다

담당자의 요청에 따라

프로시저를 만들었습니다

 

그런데

인터페이스로 다른 곳에 제공 할 때

뷰로 하고 싶다는데

프로시저를 통해 보여지는 컬럼값들을

뷰로 만들어서 보이게 할 수 있을까요?

by 르매 [2019.05.23 10:57:18]

프로시저의 내용을 단순히 하나의 SELECT 문으로 만들 수 있다면 이 질문을 안하셨겠죠?
아마 프로시저의 내용이 복잡해서 직접 뷰로 전환하기는 어렵고, 뷰 안에서 SP를 호출하고 그 결과를 반환할 수 있는지 묻고 계신 것 같습니다.

답은.. "안된다" 입니다. 
뷰 안에서 SP 호출은 불가능하니까요.

"인터페이스로 다른 곳에 제공할 때 뷰로 하고 싶다" 고 하셨는데, 즉.. 적절한 권한을 주고 FROM 절에서 호출해서 사용할 수 있게 해 주면 된다는 의미로 보입니다.

그렇다면 대안으로 사용자 정의 함수 중.. FROM 절에서 사용할 수 있는 테이블 함수 (Table Valued Function)를 고려해 볼 수 있습니다.

참고로.. MS-SQL에서는 3종류의 함수가 있어요.
- 스칼라 함수
- 인라인 테이블 함수 (inline TVF)
- 테이블 함수 (multi-statement TVF)

이 중에 FROM절에서 테이블이나 뷰처럼 사용할 수 있는 함수는 아래 2가지입니다.
(개념적으로는 parameterized view 라고도 부르죠)

각설하고..

SP 안에서 사용하는 왠만한 기능들은 함수 안에서도 사용할 수 있으니, SP를 테이블 함수로 변환해 보세요.
간단한거면 인라인 테이블 함수로도 되겠지만.. 아마 테이블 함수로 만드셔야 할 겁니다.

아래 링크에서 MSTVF 부분 보세요.

MSDN : https://docs.microsoft.com/ko-kr/sql/relational-databases/user-defined-functions/create-user-defined-functions-database-engine?view=sql-server-2017

아.. 이렇게 얘기하면 함수 안에서 SP를 호출하면 안되냐고 하실 수 있는데.. 원칙적으로는 그것도 안됩니다.
다만, linked server와 openquery를 조합한 꼼수를 사용하면 불가능한 것은 아니지만.. 별로 권해드리고 싶진 않네요. ^^


by 우리집아찌 [2019.05.23 11:26:03]

아마 제생각에는 프로시저가 다이나믹 쿼리로 되어있을거 같은데 맞나요??

그렇다면 프로스져 내용을 올려봐 주새요

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입