Solução alternativa para chamar a função com valor de tabela remotamente no SQL Server tem ainda mais problemas

Eu tinha uma consulta com um conjunto de parâmetros que precisavam ser executados várias vezes com parâmetros diferentes, então eu o envolvi em uma função com valor de tabela.

Essa tabela valeu a função necessária chamada de um servidor remoto. Infelizmente, a chamada falha no servidor vinculado com o erro:

Msg 4122, Level 16, State 1, Line 29
Remote table-valued function calls are not allowed.

A Microsoft reconheceu que "chamar remotamente uma função com valor de tabela" era um recurso deixado de fora do SQL Server 2008. Consulte:http://connect.microsoft.com/SQLServer/feedback/details/276758/remote-table-valued-function-calls-are-not-allowed

Descobri uma solução alternativa usando a sintaxe OPENQUERY, que permite que a consulta seja executada localmente no servidor remoto e, em seguida, retorne o conjunto de resultados. Vejo:http://social.msdn.microsoft.com/Forums/en/transactsql/thread/7a6e4aa1-630b-4ad5-aee5-15139987adbd

Infelizmente, essa solução alternativa precisava de uma solução alternativa, porque requer uma string como argumento, o que significa que você não pode passar uma variável usando a sintaxe OPENQUERY e nem pode concatenar uma string nela, como se você quisesse incluir variáveis ​​que você deseja passar para a função de valor de tabela remota. A solução alternativa para a solução alternativa é construir explicitamente a consulta OPENQUERY com SQL dinâmico, garantindo que uma cadeia normal seja passada para ela. Vejo:http://social.msdn.microsoft.com/Forums/pt-BR/transactsql/thread/0847ad24-0dfe-4ae1-9788-5516c7830f40/

Ainda assim, outro problema resulta disso. Mesmo depois de garantir todas as aspas e aspas duplas e aspas quádruplas são encaixadas corretamente para que a coisa toda possa ser passada através de exec sp_executesql ainda há um problema:

Quando a consulta finalmente chama a função com valor de tabela, recebo o erro:

OLE DB provider "SQLNCLI10" for linked server "MY_REMOTE_SERVER_NAME" returned message "Deferred prepare could not be completed.".
Msg 7416, Level 16, State 1, Procedure MyTableValuedFunctionName, Line 22
Access to the remote server is denied because no login-mapping exists.

Eu não tenho certeza porque estou recebendo este erro, porque o mapeamento existe para o meu nome de usuário, e se eu simplesmente substituir a função com valor de tabela por uma tabela real, ele retornará os resultados. O problema ocorre com a instrução OPENQUERY, independentemente de ser executada com sp_executesql ou não, e como eu disse, isso ocorre apenas ao chamar uma função com valor de tabela.

Alguma idéia de como resolver isso?

questionAnswers(2)

yourAnswerToTheQuestion