繁体   English   中英

通过SQL Server 2005中的UDF有条件地返回多个表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM