2013-04-25 24 views
23

Come posso fare questo lavoro? Sto eseguendo una funzione di valore di tabella da un server remoto collegato. Ho provato ad aggiungere alcun blocco a questa denominazione in 4 parti, ma ottengo ancora lo stesso errore. Im utilizzando mssql-2008Funzione stimata tabella remota Le chiamate non sono consentite

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

risposta

40

è necessario aggiungere WITH (NOLOCK). Non del tutto sicuro del perché, ma ho appena incontrato questo problema oggi e questo ha risolto il mio problema.

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

CON parola chiave fa davvero il trucco. –

+1

Questo genera un errore per me. Sembra in conflitto con la risposta su http://dba.stackexchange.com/questions/71174/use-nolock-hint-when-calling-table-valued-function. –

+2

Questo ha funzionato per me. Qualche vecchio codice aveva solo ** (nolock) ** e ricevevo un errore nell'usarlo in SSMS. L'aggiunta di ** WITH ** ha risolto il problema. –

2

Vai a questa risposta:

Use OPENQUERY

Sostituire chiamata SP con SELECT ... FROM fn() query e dovrebbe funzionare.

9

Nolock non funziona per me.
Tuttavia, utilizzando OPENQUERY fa ...

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

In una nota, il problema è OPENQUERY non permette una variabile, quindi non si può avere parametri variabili. È tuttavia possibile fare riferimento a tutte le tabelle e le viste come viste da un server remoto e creare semplicemente la funzione 1: 1 con valori di tabella localmente. Questo probabilmente sarà lento, comunque.

+0

OPENQUERY funziona come per magia. – christofr

+3

Nota: tabelle e viste di riferimento come "sinonimi" invece - variante molto migliore ... –

3

Assicurarsi inoltre che RPC OUT sia impostato su TRUE nelle opzioni del server collegato. Questa opzione è necessaria anche quando si tenta di eseguire la stored procedure sul server collegato. Altrimenti si otterrà l'errore seguente.

server 'servername' non è configurato per RPC

enter image description here

1

Questo è l'esempio di chiamare una funzione definita dall'utente SQL remoto restituisce una tabella come output in SQL Server 2014. È lavorando per me.

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

Following SQL OpenQuery comando dovrebbe funzionare

I valori dei parametri che sono circondati con ' sono sostituiti con letto ''

Quindi in questo caso non v'è alcuna necessità di creare una stored procedura sulla banca dati dell'istanza di destinazione

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