2009-11-30 35 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] 

,我想将它升级到的东西simular:

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 

一绝定义返回表 ,以便必须返回预定义的字段 而不是任何表l ike

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