Функция на основе таблиц TSQL, возвращающая разные таблицы - PullRequest
0 голосов
/ 30 ноября 2009

Я пытаюсь написать табличную функцию, чтобы она возвращала разные результаты в зависимости от значения.

У меня есть:

CREATE FUNCTION [dbo].[tblfn_GetAnyDataSet_As_View]
(@DataType as varchar(50))
returns table as
return
select * from
(select * from table1 UNION select * from table2) DATA
where DATA.DataType=@DataType

и я хочу обновить его до чего-то похожего на:

CREATE FUNCTION [dbo].[tblfn_GetAnyDataSet_As_View]
(@DataType as varchar(50))
returns table as
return
Case @DataSet
when 'D1' then select * from table1
when 'D2' then select * from table2
else select 'Not Selected'
end

, но регистр не поддерживается в табличных функциях. Мне нужно сохранить это как табличную функцию, так как у меня есть другие табличные функции, которые основываются друг на друге для создания окончательного представления, которое используется службами отчетов SQL.

Кто-нибудь может мне помочь?

Ответы [ 3 ]

2 голосов
/ 30 ноября 2009

Вы должны создать табличную функцию Multi-Statement. Они работают как стандартные табличные функции, но очень похожи на хранимые процедуры.

Остерегайтесь, однако, вы можете потерять производительность, используя функции с несколькими операторами.

0 голосов
/ 20 декабря 2009

Мне это тоже нужно ...

Решение многоуровневой табличной функции хорошо, но недостаточно:

CREATE FUNCTION myProc (@ID Int)
   RETURNS @EmployeeList Table
     (  ID     Int
      , Name   nVarChar(50)
      , Salary Money
     )
 AS
   BEGIN
     IF @ID IS NULL
       BEGIN
         INSERT INTO @EmployeeList (ID, Name, Salary)
         SELECT ID, Name, Salary
         FROM Employee
       END
     ELSE
       BEGIN
         INSERT INTO @EmployeeList (ID, Name, Salary)
         SELECT ID, Name, Salary
         FROM Employee
         WHERE ID = @ID
       END
     RETURN
   END
 GO

Нужно д е н и е таблица возврата так что предопределенное поле должно быть возвращено а не какой-нибудь стол вроде

if @tableNum=1
then select * from tableA --(tableA and tableB are completely differnt )
else 
select * from tableB
0 голосов
/ 30 ноября 2009

Попробуйте это:

IF @DataSet = 'D1' BEGIN SELECT ... END
ELSE BEGIN SELECT ... END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...