Вызывать TVF для каждой записи таблицы и объединять результаты

Я думал, что это должно быть очевидно, но я не могу понять это.

Скажем, есть таблица tblData со столбцом ID и табличной функцией (_tvf), которая принимает ID в качестве параметра. Мне нужны результаты для всех идентификаторов в tblData.

Но:

SELECT * FROM tblData data 
INNER JOIN dbo._tvf(data.ID) AS tvfData
   ON data.ID = tvfData.ID

выдает ошибку: The multi-part identifier "data.ID" could not be bound

Каков правильный способ передать все идентификаторы в этот TVF и объединить результаты?

Спасибо


person Tim Schmelter    schedule 21.10.2010    source источник


Ответы (1)


Я думаю, вам может понадобиться использовать CROSS APPLY вместо внутреннего соединения:

SELECT * 
FROM dbo.tblData data 
CROSS APPLY dbo._tvf(data.ID) AS tvfData

Это вызовет функцию TVF для каждого data.ID базовой таблицы и соединит результаты со столбцами базовой таблицы.

Смотрите ресурсы здесь:

person marc_s    schedule 21.10.2010
comment
К сожалению, я получаю сообщение о том, что максимальная рекурсия 100 исчерпана до завершения оператора Ошибка. потому что это другой вопрос, может быть, вы могли бы мне помочь и здесь. stackoverflow.com/questions/3986240 / - person Tim Schmelter; 21.10.2010
comment
Мне пришлось применить OPTION (MAXRECURSION 0) к концу оператора Selct, который вызывает ITVF. Теперь все работает, еще раз спасибо. - person Tim Schmelter; 21.10.2010