基于TSQL表的函数返回不同的表

时间:2009-11-30 13:19:43

标签: function 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 DATA.DataType=@DataType

我希望将其升级到类似于:

的东西
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报告服务使用的最终视图。

任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:2)

您必须创建基于表的多语句功能。 它们作为标准表函数工作,但很像存储过程。

请注意,使用多语句功能可能会导致性能下降。

答案 1 :(得分:0)

试试这个:

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

答案 2 :(得分: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

必须 d e f i n e 返回表 这样就必须返回一个预定义的字段 而不是像

这样的表格
if @tableNum=1
then select * from tableA --(tableA and tableB are completely differnt )
else 
select * from tableB