Вы не можете делать то, что хотите.
Во-первых, вы не можете передавать таблицы в качестве параметров в функции. Как объясняет документация :
Параметры могут заменять только константы; их нельзя использовать вместо имен таблиц, имен столбцов или имен других объектов базы данных.
Теоретически вы могли бы использовать Dynami c SQL для построения запрос и запустить его. К сожалению, execute
используется только для расширенных функций. Это немного скрыто в документации, но это там :
Пользовательские функции не могут использовать динамические c SQL или временные таблицы. Табличные переменные допускаются.
Это действительно не оставляет хороших вариантов. Вы можете попытаться придумать другой подход, который не требует хранения связанных данных в нескольких различных таблицах. Или, возможно, вы можете использовать хранимую процедуру вместо UDF.
Существуют некоторые очень запутанные обходные пути, которые включают использование расширенной хранимой процедуры или CLR для выполнения пакетной команды, которая, в свою очередь, передает запрос в база данных. Это действительно сложно, подвержено ошибкам, и я никогда не видел его в производственном коде.