Tri*_*nko 12 permissions linked-server openquery sql-server-2008 sp-executesql
我有一组查询需要使用不同的参数多次运行,所以我把它包装在一个表值函数中.
需要从远程服务器调用该表值函数.不幸的是,链接服务器上的调用失败并出现错误:
Msg 4122, Level 16, State 1, Line 29
Remote table-valued function calls are not allowed.
Run Code Online (Sandbox Code Playgroud)
Microsoft已承认"远程调用表值函数"是SQL Server 2008中遗漏的一项功能.请参阅:http://connect.microsoft.com/SQLServer/feedback/details/276758/remote-table-valued-function -calls-是-不被允许
我发现了一种使用OPENQUERY语法的解决方法,它允许查询在远程服务器上本地运行,然后返回结果集.请参阅:http://social.msdn.microsoft.com/Forums/en/transactsql/thread/7a6e4aa1-630b-4ad5-aee5-15139987adbd
不幸的是,这个解决方法需要一个解决方法,因为它需要一个字符串作为参数,这意味着你不能使用OPENQUERY语法传递一个变量,你甚至不能在其中连接一个字符串,就像你想要包含你的变量一样想要传递给远程表值函数.解决方法的解决方法是使用动态SQL显式构建OPENQUERY查询,确保将正常的字符串传递给它.请参阅: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.
Run Code Online (Sandbox Code Playgroud)
我不知道为什么我收到此错误,因为我的用户名存在映射,如果我只是用实际表替换表值函数,它会返回结果.OPENQUERY语句出现问题,无论是否使用sp_executesql执行,并且正如我所说,它只在调用表值函数时发生.
任何想法如何解决这个问题?
Aar*_*and 14
你有没有尝试过这种变化 - 基本上你将调用函数推送到远程盒子本地发生:
EXEC REMOTE_SERVER_NAME.db_name..sp_executesql N'SELECT *
FROM dbo.MyTableValuedFunctionName();';
Run Code Online (Sandbox Code Playgroud)