I had a query with a set of parameters that needed to be run multiple times with different parameters, so I wrapped it in a table-valued function.
That table valued
Have you tried this variation - basically you push the call to the function to happen locally on the remote box:
EXEC REMOTE_SERVER_NAME.db_name..sp_executesql N'SELECT *
FROM dbo.MyTableValuedFunctionName();';
In case you can't solve it by calling an EXEC (because you're calling this function from another function or you're trying to do something like INSERT EXEC but you can't nest it, etc.), here is a workarround that solved this problem for me:
You can create a function in your local server that runs the same query as the remote function (asuming you know the implementation of the remote function) since you can access tables and "static-called-functions" (by openquery) with no problems.
In example, if the remote function is something like this:
CREATE FUNCTION dbo.[remote_function] (@param1 varchar(200))
RETURNS TABLE AS RETURN
( SELECT col1, col2, col3 FROM [remote_db].[dbo].[remote_table] where col1 = @param1)
GO
You can create a function in your local server:
CREATE FUNCTION dbo.[local_function] (@param1 varchar(200))
RETURNS TABLE AS RETURN
( SELECT col1, col2, col3 FROM [remote_server].[remote_db].[dbo].[remote_table] where col1 = @param1)
GO
And then just query your new function as you want...
SELECT col1, col2, col3 FROM dbo.local_function(@param1);
GO
It should work with no problems.