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

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

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

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

Microsoft признала, что «удаленный вызов функции, возвращающей табличное значение», был функцией, отсутствующей в SQL Server 2008. См.: http://connect. Майкрософт.com/SQLServer/feedback/details/276758/remote-table-valued-function-call-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 или нет, и, как я уже сказал, это происходит только при вызове функции с табличным значением.

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

12
задан Triynko 11 June 2012 в 14:43
поделиться