2013-04-25 6 views

Odpowiedz

40

Trzeba dodać WITH (NOLOCK). Nie jestem do końca pewien, dlaczego, ale właśnie wpadłem na ten problem dzisiaj i to rozwiązało mój problem.

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

Z słowo kluczowe naprawdę działa. –

+1

Generuje to błąd dla mnie. Wydaje się, że jest to sprzeczne z odpowiedzią na http://dba.stackexchange.com/questions/71174/use-nolock-hint-when-calling-table-valued-function. –

+2

To zadziałało dla mnie. Jakiś stary kod właśnie miał ** (nolock) ** i otrzymywałem błąd używając go w SSMS. Dodanie ** Z ** poprawiło mój problem. –

2

Zobacz tę odpowiedź:

Use OPENQUERY

Zamień połączenia SP z SELECT ... FROM fn() zapytania i powinno działać.

9

Nolock nie działa dla mnie.
Jednak użycie OPENQUERY robi ...

Wymień DMS_DB.dbo.tfu_V_DMS_Desktop(''de'')' z [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 

W przypisie, problem jest OPENQUERY nie pozwala na zmienną, więc nie można mieć zmienne parametry. Można jednak odwoływać się do wszystkich tabel i widoków jako widoków ze zdalnego serwera i po prostu utworzyć lokalnie funkcję o wartości tabelarycznej 1: 1. Prawdopodobnie będzie to jednak powolne.

+0

OPENQUERY działa jak magia. – christofr

+3

Uwaga: Tabele referencyjne i widoki jako "synonimy" zamiast tego - znacznie lepszy wariant ... –

3

Upewnij się również, że RPC OUT ma ustawione PRAWDA w połączonych opcjach serwera. Ta opcja jest również potrzebna podczas próby wykonania procedury składowanej na serwerze połączonym. W przeciwnym razie pojawi się następujący błąd.

serwera nazwa_serwera "nie jest skonfigurowany dla RPC

enter image description here

1

To jest przykładem wywoływania zdalnego użytkownika SQL określoną funkcję powracającego tabelę jako wyjście w SQL Server 2014. Jest pracuję dla mnie.

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

następujące polecenie SQL OpenQuery powinien pracować

wartości parametrów, które są otoczone ' są zastępowane podwójnym «»

w tym przypadku więc nie ma potrzeby, aby utworzyć zapisane procedura w docelowej bazie danych instancji

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