Obejście problemu polegające na zdalnym wywoływaniu funkcji wycenianej w tabeli w SQL Server ma jeszcze więcej problemów

Miałem zapytanie z zestawem parametrów, które trzeba było uruchamiać wiele razy z różnymi parametrami, więc zapakowałem je w funkcję z wartościami tabel.

Potrzebna funkcja o wartości tabeli wywołana ze zdalnego serwera. Niestety, połączenie nie powiedzie się na serwerze połączonym z błędem:

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

Microsoft przyznał, że „zdalne wywołanie funkcji wycenianej w tabeli” zostało pominięte w SQL Server 2008. Zobacz:http://connect.microsoft.com/SQLServer/feedback/details/276758/remote-table-valued-function-calls-are-not-allowed

Odkryłem obejście przy użyciu składni OPENQUERY, która umożliwia kwerendę uruchamianą lokalnie na serwerze zdalnym, a następnie zwraca zestaw wyników. Widzieć:http://social.msdn.microsoft.com/Forums/en/transactsql/thread/7a6e4aa1-630b-4ad5-aee5-15139987adbd

Niestety, to obejście wymagało obejścia, ponieważ wymaga ono ciągu znaków jako argumentu, co oznacza, że ​​nie można przekazać zmiennej za pomocą składni OPENQUERY i nie można nawet połączyć w niej łańcucha, na przykład jeśli chcemy uwzględnić zmienne, które użytkownik chcesz przejść do funkcji zdalnej wartości z tabeli. Rozwiązaniem obejścia jest jawne zbudowanie zapytania OPENQUERY z dynamicznym SQL, co zapewni przekazanie normalnego ciągu znaków. Widzieć:http://social.msdn.microsoft.com/Forums/en-US/transactsql/thread/0847ad24-0dfe-4ae1-9788-5516c7830f40/

Nadal jednak z tego wynika inny problem. Nawet po upewnieniu się, że wszystkie cudzysłowy i cudzysłowy oraz poczwórne cudzysłowy są osadzone poprawnie, cała rzecz może zostać przekazana przez exec sp_executesql, nadal występuje problem:

Gdy zapytanie ostatecznie wywołuje funkcję z wartościami tabel, pojawia się błąd:

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.

Nie jestem pewien, dlaczego otrzymuję ten błąd, ponieważ mapowanie istnieje dla mojej nazwy użytkownika, a jeśli po prostu zastąpię funkcję wycenianą tabelą rzeczywistą tabelą, zwraca ona wyniki w porządku. Problem występuje z instrukcją OPENQUERY, niezależnie od tego, czy jest ona wykonywana za pomocą sp_executesql, czy nie, i jak powiedziałem, występuje tylko podczas wywoływania funkcji z wartościami tabel.

Jakieś pomysły, jak to rozwiązać?

questionAnswers(2)

yourAnswerToTheQuestion