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

时间:2011-02-07 13:57:10

标签: .net sql 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语句和其他错误的错误。 请根据标志帮我修改同样的表格。 谢谢。

3 个答案:

答案 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