Sql 不允许远程表值函数调用

Sql 不允许远程表值函数调用,sql,sql-server,user-defined-functions,nolock,Sql,Sql Server,User Defined Functions,Nolock,我如何才能做到这一点?我正在从远程链接服务器运行一个表值函数。我试着在这个由4部分组成的命名中不加锁,但还是出现了同样的错误。Im使用mssql-2008 select * from [110.10.10.100].testdbname.dbo.ufn_getdata('4/25/2013') as tb;(NOLOCK) 您需要使用(NOLOCK)添加。不完全清楚为什么,但我今天遇到了这个问题,这解决了我的问题 SELECT * FROM [110.10.10.100].testdbnam

我如何才能做到这一点?我正在从远程链接服务器运行一个表值函数。我试着在这个由4部分组成的命名中不加锁,但还是出现了同样的错误。Im使用mssql-2008

select * from [110.10.10.100].testdbname.dbo.ufn_getdata('4/25/2013') as tb;(NOLOCK)

您需要使用(NOLOCK)添加
。不完全清楚为什么,但我今天遇到了这个问题,这解决了我的问题

SELECT * 
FROM [110.10.10.100].testdbname.dbo.ufn_getdata('4/25/2013') AS tb WITH (NOLOCK);
看看这个答案:


将SP调用替换为
SELECT。。。从fn()
查询,它应该可以工作。

Nolock对我不起作用
但是,使用OPENQUERY不会

DMS_DB.dbo.tfu_V_DMS_Desktop('de')
替换为
[110.10.10.100].testdbname.dbo.ufn_getdata('4/25/2013')

在脚注中,问题是OPENQUERY不允许使用变量,因此不能使用变量参数。
但是,您可以将所有表和视图作为远程服务器的视图引用,只需在本地创建表值函数1:1。但是,这可能会很慢。

还要确保在链接服务器选项中将RPC OUT设置为TRUE。当您尝试在链接服务器上执行存储过程时,也需要此选项。否则将出现以下错误

未为RPC配置服务器“servername”


这是调用远程SQL用户定义函数的示例,该函数在SQL Server 2014中返回一个表作为输出。它对我有用

Declare @Param1 Varchar(10)
Declare @SqlText nvarchar(4000)
Set  @Param1 = 'xxx'
Set @SqlText = 'SELECT * FROM Database.dbo.ufn_Function (''' + @Param1 + ''')'
EXEC LinkedServer.Database.dbo.sp_executesql @SqlText
下面的命令应该有效

'包围的参数值将替换为双'

因此,在这种情况下,不需要在目标实例数据库上创建存储过程

SELECT * 
FROM OPENQUERY(
    [110.10.10.100],
    'SELECT * FROM testdbname.dbo.ufn_getdata(''4/25/2013'')'
) as oq

这为我产生了一个错误。这似乎与我的回答有冲突。这对我来说很有效。一些旧代码刚刚出现(nolock),我在SSMS中使用它时遇到了一个错误。添加修复了我的问题。这对我不起作用,或者返回错误“不允许远程表值函数调用”。它在哪个版本中工作?我试过用2012。@HannoverFist完全正确!我在升级时遇到了这个问题。旧查询在表后选择了
s,而不是选择了(NOLOCK);显然,较旧版本的SQL比较新版本更能原谅这种遗漏。好提示@ExceptionLimeCat!这对我也有用。使用Azure DB时,必须使用
SELECT * 
FROM OPENQUERY(
    [110.10.10.100],
    'SELECT * FROM testdbname.dbo.ufn_getdata(''4/25/2013'')'
) as oq