Les appels de fonction à table distante ne sont pas autorisés

Comment puis-je faire ce travail? Im en cours d'exécution d'une fonction de valeur de table à partir d'un server distant lié. J'ai essayé d'append aucun verrou à cette dénomination en 4 parties, mais j'ai toujours la même erreur. Im en utilisant mssql-2008

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

Vous devez append WITH (NOLOCK) . Je ne sais pas exactement pourquoi, mais je viens de rencontrer ce problème aujourd'hui et cela a résolu mon problème.

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

Nolock ne travaille pas pour moi.
Cependant, en utilisant OPENQUERY fait …

Remplacez DMS_DB.dbo.tfu_V_DMS_Desktop(''de'')' par [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 

Dans une note de bas de page, le problème est que OPENQUERY n'autorise pas de variable, donc vous ne pouvez pas avoir de parameters variables. Vous pouvez toutefois referencer toutes les tables et vues en tant que vues d'un server distant et créer simplement la fonction table 1: 1 localement. Ce sera probablement lent, cependant.

Voir cette réponse:

Utiliser OPENQUERY

Remplacer l'appel SP par une requête SELECT ... FROM fn() et cela devrait fonctionner.

Assurez-vous également que RPC OUT est défini sur TRUE dans les options de server lié. Cette option est également nécessaire lorsque vous essayez d'exécuter une procédure stockée sur un server lié. Sinon, vous obtiendrez une erreur de suivi.

Le nom de server 'server' n'est pas configuré pour RPC

entrez la description de l'image ici

C'est l'exemple de l'appel d'une fonction définie par l'user SQL distant renvoyant une table en tant que sortie dans SQL Server 2014. Cela fonctionne pour moi.

 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 

La command SQL OpenQuery suivante doit fonctionner

Les valeurs de paramètre entourées de ' sont remplacées par des doubles '

Dans ce cas, il n'est pas nécessaire de créer une procédure stockée sur la database d'instance cible

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