2012-09-24 3 views
2

У меня есть таблица IDTable с одной колонкой ID, а также у меня есть одна табличная функция MyProcedure, которая принимает параметр. Этот параметр - мой столбец ID. Эта функция возвращает таблицу. Мне нужно вызвать эту функцию для каждого значения в столбце ID. У меня есть такой код:Как преобразовать цикл в табличный запрос?

Declare @ResultTable table(
    ClientID nvarchar(50) null, 
    [Date] datetime null, 
    Item varchar(100) null 
) 

Declare @IDTable table(
    id int 
) 

declare @counter as int 
set @counter = isnull((select max(id) from @IDTable),0) 
while @counter<>0 
begin 
    set @ID = (select id from @IDTable where [email protected]) 

    insert into @ResultTable 
     select ClientID 
       [Date], 
       Item 
     from MyProcedure (@ID) 

    delete from @IBTable where [email protected] 
    set @counter=isnull((select max(id) from @IBTable),0) 
end 

Мне нужно удалить во время цикла и сделать альтернативу на основе набора. Как мне это сделать?

+0

'MyProcedure (@ID)' представляет собой таблицу, функция? –

+0

О, да. это функция, учитывающая таблицу – andDaviD

ответ

0

Вы можете использовать CROSS APPLY:

insert into @ResultTable 
    select b.ClientID, 
      b.[Date], 
      b.Item 
    from  @IDTable a 
    CROSS APPLY MyProcedure(a.id) b 
+0

Да, вы правы. Благодарю. – andDaviD

+0

Я рад, что могу помочь. –

 Смежные вопросы

  • Нет связанных вопросов^_^