Les appels de fonctions à valeur de table à distance ne sont pas autorisés

Comment faire pour que ça marche?J'exécute une fonction de valeur de table à partir d'un serveur lié à distance. j'ai essayé d'ajouter AUCUNE serrure à ce nom de 4 parties mais j'obtiens 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)
24
demandé sur tbone 2013-04-25 11:48:18
la source

6 ответов

Vous devez ajouter WITH (NOLOCK). Je ne sais pas vraiment 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);
42
répondu ExceptionLimeCat 2013-06-21 23:11:01
la source

Nolock ne fonctionne pas pour moi.

Cependant, L'utilisation de OPENQUERY le fait...

Remplacer 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

sur une note de bas de page, le problème est que OPENQUERY n'autorise pas une variable, donc vous ne pouvez pas avoir de paramètres variables. Vous pouvez cependant référencer toutes les tables et vues comme vues à partir d'un serveur distant, et juste créer la fonction de valeur de table 1:1 localement. Ce sera probablement lente, cependant.

9
répondu Stefan Steiger 2014-10-06 12:05:59
la source

assurez-vous également que RPC OUT est défini à TRUE dans les options du serveur lié. Cette option est également nécessaire lorsque vous essayez d'exécuter une procédure stockée sur un serveur lié. Sinon, vous obtiendrez l'erreur suivante.

Server 'servername' n'est pas configuré pour RPC

enter image description here

3
répondu Shahdat 2016-12-08 19:39:25
la source

Suivant SQL OpenQuery commande devrait fonctionner

valeurs des paramètres qui sont entourées de ' sont remplacés par double "

donc dans ce cas il n'est pas nécessaire de créer une procédure stockée sur la base de données d'instance cible

SELECT * 
FROM OPENQUERY(
    [110.10.10.100],
    'SELECT * FROM testdbname.dbo.ufn_getdata(''4/25/2013'')'
) as oq
3
répondu Eralper 2017-12-20 15:08:36
la source

Voir cette réponse:

Use OPENQUERY

remplacer SP call par SELECT ... FROM fn() requête et ça devrait marcher.

1
répondu Mr. TA 2017-05-23 15:09:58
la source

ceci est l'exemple de l'appel d'une fonction définie par un utilisateur SQL distant retournant une table en sortie dans SQL Server 2014. Il est travaillé 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
1
répondu Rajesh 2017-04-26 00:45:21
la source