2009-11-30 6 views
0

값에 따라 다른 결과를 반환하도록 테이블 기반 함수를 작성하려고합니다.다른 테이블을 반환하는 TSQL 테이블 기반 함수

나는이 :

CREATE FUNCTION [dbo].[tblfn_GetAnyDataSet_As_View] 
(@DataType as varchar(50)) 
returns table as 
return 
select * from 
(select * from table1 UNION select * from table2) DATA 
where [email protected] 

난에 시뮬 무언가로 업그레이드하려면 :

CREATE FUNCTION [dbo].[tblfn_GetAnyDataSet_As_View] 
(@DataType as varchar(50)) 
returns table as 
return 
Case @DataSet 
when 'D1' then select * from table1 
when 'D2' then select * from table2 
else select 'Not Selected' 
end 

하지만 사건이 테이블 함수에서 지원되지 않습니다. SQL보고 서비스에서 사용하는 최종 뷰를 작성하기 위해 서로 빌드하는 다른 테이블 함수가 있으므로 테이블 함수로 유지해야합니다.

아무도 도와 줄 수 있습니까?

답변

2

다중 테이블 테이블 기반 함수를 만들어야합니다. 표준 테이블 함수로 작동하지만 저장 프로 시저와 매우 유사합니다.

다중 명령문 기능을 사용하면 성능 손실이 발생할 수 있으므로주의해야합니다.

0

이 시도 :

IF @DataSet = 'D1' BEGIN SELECT ... END 
ELSE BEGIN SELECT ... END 
0

을 나는이 너무 ...

은 다중 문 테이블 기반 기능의 솔루션은 잘하지만 충분하지 않습니다 필요

CREATE FUNCTION myProc (@ID Int) 
    RETURNS @EmployeeList Table 
    ( ID  Int 
     , Name nVarChar(50) 
     , Salary Money 
    ) 
AS 
    BEGIN 
    IF @ID IS NULL 
     BEGIN 
     INSERT INTO @EmployeeList (ID, Name, Salary) 
     SELECT ID, Name, Salary 
     FROM Employee 
     END 
    ELSE 
     BEGIN 
     INSERT INTO @EmployeeList (ID, Name, Salary) 
     SELECT ID, Name, Salary 
     FROM Employee 
     WHERE ID = @ID 
     END 
    RETURN 
    END 
GO 

한 필수 반환 테이블 을 정의하여 사전 정의 된 필드가 이면서 어떤 테이블도 반환되지 않아야합니다. ike

if @tableNum=1 
then select * from tableA --(tableA and tableB are completely differnt) 
else 
select * from tableB 
관련 문제