我正在尝试编写一个基于表的函数,因此根据值返回不同的结果。
我有:
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报告服务使用的最终视图。
任何人都可以帮助我吗?
答案 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