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

ano*_*110 30 sql sql-server nolock user-defined-functions

我怎样才能使这个工作?我从远程链接服务器运行一个表值函数.我尝试添加没有锁定这4部分命名,但我仍然得到相同的错误.我正在使用mssql-2008

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

Exc*_*Cat 55

你需要添加WITH (NOLOCK).不完全确定为什么,但我今天刚遇到这个问题,这解决了我的问题.

SELECT * 
FROM [110.10.10.100].testdbname.dbo.ufn_getdata('4/25/2013') AS tb WITH (NOLOCK);
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用.一些旧代码只有**(nolock)**,我在SSMS中使用它时遇到错误.添加**WITH**修复我的问题. (3认同)
  • 这会给我带来错误.它似乎与http://dba.stackexchange.com/questions/71174/use-nolock-hint-when-calling-table-valued-function上的答案相冲突. (2认同)

Ste*_*ger 10

Nolock不适合我.
但是,使用OPENQUERY会...

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

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[tfu_V_DMS_Desktop]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION [dbo].[tfu_V_DMS_Desktop]
GO



CREATE FUNCTION [dbo].[tfu_V_DMS_Desktop] 
(   
    @param1 int 
)
    RETURNS table 
AS
RETURN 
(
    -- Add the SELECT statement with parameter references here
    -- SELECT 0 as abc
    SELECT * FROM OPENQUERY(CORDB2008R2, 'SELECT * FROM DMS_DB.dbo.tfu_V_DMS_Desktop(''de'')') 
)

GO
Run Code Online (Sandbox Code Playgroud)

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

  • 注意:参考表和视图改为"同义词" - 更好的变体...... (3认同)

Era*_*per 5

以下SQL OpenQuery命令应该可以正常工作

'包围的参数值被替换为 double ''

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

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