sql-server-2008 – 在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语法传递变量,甚至不能连接一个字符串,就像您想要包含变量一样想要传递给远程表值函数.解决方法的解决方法是使用动态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,Procedure MyTableValuedFunctionName,Line 22 Access to the remote server is denied because no login-mapping exists. 我不知道为什么我收到这个错误,因为映射存在于我的用户名,如果我只是替换表值函数与一个实际的表,它返回的结果是罚款.无论OPENQUERY语句是否使用sp_executesql执行,OPENQUERY语句都会出现此问题,正如我所说的,它只在调用表值函数时发生. 任何想法如何解决? 解决方法你尝试过这个变体 – 基本上你把这个函数推送到遥控器上本地发生的功能:EXEC REMOTE_SERVER_NAME.db_name..sp_executesql N'SELECT * FROM dbo.MyTableValuedFunctionName();'; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 在SQLServer 2005附加SQLServer 2008数据库异常处理
- SQLServer 资源调控器
- MySQL笔记之修改表的实现方法
- sqlserver 数据库恢复
- win2003安装sqlserver 2000提示无法验证产品密钥的解决方法
- 认识SQLSERVER中的syscolumns表
- sql-server-2008 – 从sql server 2000迁移到2008 r2 – 如
- Access与SqlServer数据类型比较,timestamp时间戳详解
- mssql sqlserver 使用sql脚本检测数据表中一列数据是否连续
- sql-server – 从索引列上的一个非常大的表中选择TOP 1非常