Условный возврат нескольких таблиц через UDF в SQL Server 2005 - PullRequest
1 голос
/ 07 февраля 2011

Мне было интересно, есть ли способ вернуть выбор таблицы условно в пользовательской функции (UDF) в SQL Server 2005.

Я написал такой код:

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 ]

1 голос
/ 07 февраля 2011

Нет, это невозможно при использовании встроенного или многопотокового TVF (если только 2 таблицы не совместимы с объединениями?)

0 голосов
/ 07 февраля 2011

Попробуйте что-то вроде следующего ... Если значения столбцов не совпадают между двумя выборами, вы можете выполнить преобразование для каждого из них, чтобы соответствовать им.

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 
0 голосов
/ 07 февраля 2011

Вы можете сделать это, но возвращенная таблица должна выглядеть одинаково в обоих запросах.

Версия с несколькими выписками

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

Встроенная версия с использованием union

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
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...