Ответ 1
С помощью функции, используемой таблицей, вы обычно используете Cross Apply
.
Select *
From myTable m
CROSS APPLY fn_function(m.field1, m.field2)
У меня есть функция таблицы, которая возвращает таблицу. Когда я пытаюсь выполнить JOIN
табличную функцию с другой таблицей, я не получаю никаких результатов, но когда я копирую результат функции в фактическую таблицу и выполняю то же соединение, тогда получаю ожидаемые результаты.
Запрос выглядит примерно так:
Select *
From myTable
INNER JOIN fn_function(@parm1, @param2)
ON ....
Все, что у меня есть около 4 таких запросов, и у каждого из них есть немного разные функции, но все функции производят одну и ту же таблицу, но разные данные. Для некоторых из этих запросов работает INNER JOIN
, но для других это не так.
Можно предположить, почему это происходит?
С помощью функции, используемой таблицей, вы обычно используете Cross Apply
.
Select *
From myTable m
CROSS APPLY fn_function(m.field1, m.field2)
Если мы допустили некоторые предположения, что параметры таблично-значных функций динамически не зависят от столбцов myTable, это будет работать.
SELECT *
FROM myTable
INNER JOIN
(SELECT * from fn_function(@para1, @para2 etc))
ON ...
но если параметры зависят от myTable, он не будет работать
Ваше предложение "ON" соединения, скорее всего, неверно. Возможно, небольшая опечатка вроде
JOIN x ON oID = odID
вместо
JOIN x ON oID = oID
Я думаю, что это должно работать
select * from Animals
join dbo.AnimalsTypesIds(900343) as AnimalsTypes
on AnimalsTypes.TypeId = Animals.TypeId
В табличной функции таблица возврата должна иметь TypeId, чтобы соединение выполнялось в этом разделе