Обходной путь для удаленного вызова табличной функции в SQL Server имеет еще больше проблем

У меня был запрос с набором параметров, которые нужно было запускать несколько раз с разными параметрами, поэтому я обернул его в табличную функцию.

Эта табличная функция должна вызываться с удаленного сервера. К сожалению, вызов не выполняется на связанном сервере с ошибкой:

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

Microsoft признала, что «удаленный вызов табличной функции» была особенность, оставленная в SQL Server 2008. См .:http://connect.microsoft.com/SQLServer/feedback/details/276758/remote-table-valued-function-calls-are-not-allowed

Я нашел обходной путь, используя синтаксис OPENQUERY, который позволяет выполнять запрос локально на удаленном сервере и затем возвращать набор результатов. Увидеть:http://social.msdn.microsoft.com/Forums/en/transactsql/thread/7a6e4aa1-630b-4ad5-aee5-15139987adbd

К сожалению, этот обходной путь потребовал обходного пути, потому что он требует строку в качестве аргумента, то есть вы не можете передать переменную с использованием синтаксиса OPENQUERY и даже не можете объединить в ней строку, например, если вы хотите включить переменные, которые вы хочу перейти к удаленной табличной функции. Обходной путь для обходного пути заключается в явном построении запроса OPENQUERY с динамическим SQL, гарантируя, что ему передается нормальная строка. Увидеть:http://social.msdn.microsoft.com/Forums/en-US/transactsql/thread/0847ad24-0dfe-4ae1-9788-5516c7830f40/

Тем не менее, другая проблема возникает из-за этого. Даже после того, как все кавычки, двойные кавычки и четверные кавычки вставлены правильно, так что все это можно пропустить через exec sp_executesql, проблема все еще остается:

Когда запрос в конечном итоге вызывает табличную функцию, я получаю сообщение об ошибке:

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.

Я не уверен, почему я получаю эту ошибку, потому что сопоставление существует для моего имени пользователя, и если я просто заменяю табличную функцию на фактическую таблицу, она возвращает результаты в порядке. Проблема возникает с оператором OPENQUERY независимо от того, выполняется ли он с помощью sp_executesql или нет, и, как я уже сказал, это происходит только при вызове табличной функции.

Есть идеи как решить это?

Ответы на вопрос(2)

Ваш ответ на вопрос