Подтвердить что ты не робот

Удаленные вызовы с табличной функцией не допускаются

Как я могу выполнить эту работу? Я запускаю функцию с таблицей с удаленного связанного сервера. я попробовал добавить никакой блокировки к этому наименованию 4 частей, но все же я получаю ту же ошибку. Im с использованием mssql-2008

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

Ответ 1

Вам нужно добавить WITH (NOLOCK). Не совсем понятно, почему, но я просто столкнулся с этой проблемой сегодня, и это решило мою проблему.

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

Ответ 2

Нолок не работает для меня.

Однако использование 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

В сноске проблема OPENQUERY не позволяет переменную, поэтому вы не можете иметь переменные параметры. Тем не менее, вы можете ссылаться на все таблицы и представления в виде представлений с удаленного сервера и просто создавать табличную функцию 1:1 локально. Это, вероятно, будет медленным.

Ответ 3

Также убедитесь, что для RPC OUT установлено значение TRUE в параметрах связанных серверов. Этот параметр также необходим при попытке выполнить хранимую процедуру на связанном сервере. В противном случае вы получите следующую ошибку.

Серверное имя сервера 'не настроено для RPC

введите описание изображения здесь

Ответ 4

Смотрите этот ответ:

Использовать OPENQUERY

Замените вызов SP запросом SELECT ... FROM fn(), и он должен работать.

Ответ 5

Это пример вызова удаленной пользовательской функции 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

Ответ 6

После команда SQL OpenQuery должна работать

Значения параметров, которые окружены ', заменяются двойными ' '

Поэтому в этом случае нет необходимости создавать хранимую процедуру в базе данных целевых экземпляров

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