[英]Returning Multiple Tables Conditionally through UDF in SQL Server 2005
我想知道,是否有办法在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语句和其他错误上引发错误。 请帮我修改它以根据标志实现表。 谢谢。
内联或多语句TVF都不可能做到这一点(除非这两个表是联合兼容的?)
您可以执行此操作,但是返回的表在两个查询中必须看起来相同。
多语句版本
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
)
请尝试以下类似的操作...如果两个选择之间的列值不同,则可以对每个选择进行转换以匹配它们。
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.