我想知道,如果有办法在SQL Server 2005中的用户定义函数(UDF)中有条件地返回表的选择。
我编写的代码如下:
create function getMultiple(@flag int)
returns table
as
return
if @flag = 1
select * from employee where xyz>100
else
select * from managers where pqr>200
end
它不会编译并抛出If语句和其他错误的错误。 请根据标志帮我修改同样的表格。 谢谢。
答案 0 :(得分:1)
对于内联或多语句TVF,这是不可能的(除非这两个表是联合兼容的吗?)
答案 1 :(得分:0)
您可以执行此操作,但返回的表在两个查询中看起来都必须相同。
多语句版本
create function GetMulti(@Flag int)
returns @T table (F1 int, F2 varchar(50))
as
begin
if @Flag = 1
begin
insert into @T
select
EmpID,
EmpName
from Employee
end
else
begin
insert into @T
select
ManagerID,
ManagerName
from Manager
end
return
end
使用联合的内联版本
create function GetMulti2(@Flag int)
returns table
as return
(
select
EmpID as F1,
EmpName as F2
from Employee
where
@Flag = 1
union all
select
ManagerID as F1,
ManagerName as F2
from Manager
where
@Flag <> 1
)
答案 2 :(得分:0)
尝试以下内容...如果2个选项之间的列值不相同,则可以为每个选项进行转换以匹配它们。
create procedure getMultiple @flag int as
begin
if @flag = 1
select convert(varchar, myColumnB1) from MyTable where myColumnB2>100
else
select convert(varchar, myColumnC2) from MyOtherTable where myColumnC3 between '4/28/2006' and '4/30/2006'
end