상황은 이렇습니다.
view1 이라는 이름을 가지는 view가 있습니다.
해당 view는 select aaa,bbb,ccc from table1 의 구문을 가지고 있습니다.
사이트 운영중 정책이 변경되어서 table1을 부를지 table2를 부를지 유동적인 상황이 되었습니다.
table1과 구조가 같은 테이블이 n개가 생성되거든요.
그래서 view1내부의 쿼리문을 변경하려고 생각했습니다.
들어오는 인자값에 따라서 view1의 sql 구문중
select aaa,bbb,ccc from table1 의 부분을 수정하려고 했습니다.
헌데 view에서는 인자를 받을 수가 없더라고요.
그래서 테이블을 반환하는 사용자 함수를 만들어서 거기서 인자를 받은 후 사용하면 되겠다고 생각 했습니다.
그런데 테이블반환타입의 사용자 함수는 테이블명을 변수로 쓸 수 없더라고요;;
이런 상황을 해결할 방법이 없을까요?
충고 말씀 좀 부탁 드립니다.
감사합니다.
*)사용자함수는 다음과 같은 형식으로 만들려고 했습니다.
create function xxx.Selview(@c_no varchar(20))
returns @temp_table table
(
aaa varchar(20),
bbb varchar(10)
)
as
begin
declare @tablenm varchar(50)
declare @sql varchar(3000)
select @tablenm = trans_tablenm from ttt where c_no = @c_no
set @sql = N' SELECT aaa,bbb from ' + @tablenm
insert into @temp_table exec (@sql)
return
end
*)해당함수를 작성하려고 실행버튼을 누르면
'함수 내의 'INSERT EXEC'에서 파생 작업을 생성하거나 시간에 종속적인 연산자를 잘못 사용했습니다.'
라는 에러가 발생 합니다.
이 에러를 해결하려면 저장프로시저로 만들어야 한다는 글들이 있더라고요.
저는 저 쿼리의 결과를 그대로 join문에 쓰려고 하거든요...
함수 안에서는 exec를 사용할 수 없는 것으로 알고 있습니다,,
혹시 유형이 완전 동일하다면 파티션 테이블은 어떤가요?
스텐다드 버전이라면 쓸수 없지만,,,,
그게 아니라면 죄다 분기하던지, 프로시저에서 실행한 다음 템프에 넣고 사용하는 방법도 있겠네요,,,