gpt4 book ai didi

sql-server-2008 - 在 SQL Server 中远程调用表值函数的解决方法有更多问题

转载 作者:行者123 更新时间:2023-12-04 00:58:56 32 4
gpt4 key购买 nike

我有一个带有一组参数的查询,需要使用不同的参数多次运行,所以我将它包装在一个表值函数中。

该表值函数需要从远程服务器调用。不幸的是,调用在链接服务器上失败并出现错误:

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, Level 16, State 1, Procedure MyTableValuedFunctionName, Line 22
Access to the remote server is denied because no login-mapping exists.

我不确定为什么我会收到这个错误,因为我的用户名存在映射,如果我只是用实际表替换表值函数,它返回的结果很好。问题出现在 OPENQUERY 语句上,不管它是否用 sp_executesql 执行,而且正如我所说,它只在调用表值函数时发生。

任何想法如何解决这个问题?

最佳答案

您是否尝试过这种变化 - 基本上是您将调用推送到远程框本地发生的函数:

EXEC REMOTE_SERVER_NAME.db_name..sp_executesql N'SELECT * 
FROM dbo.MyTableValuedFunctionName();';

关于sql-server-2008 - 在 SQL Server 中远程调用表值函数的解决方法有更多问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10982360/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com