8

stworzyłem serwer połączony z moim lokalnym SQL Server, jak podano wpodczas korzystania z lokalnej bazy danych jako połączonego serwera „Odroczone przygotowanie nie może być zakończone” błąd

http://sqlserverplanet.com/dba/local-linked-server

Jednak gdy próbuję wykonać przechowywane Procedura w Linked Server, rzuca:

Deferred prepare could not be completed 

błędów i nieważne obiektu name 'nazwa tabeli'

+0

Po prostu wpadłem na to i okazało się, że w nazwie tabeli rozróżniana była wielkość liter w otwartych czcionkach. – gordy

Odpowiedz

10

Czy coś przeoczyć w objec t nazwa. Powinien zawsze być taki jak Database.User.ObjectName (np. Northwind.dbo.Customers)

Podaj pełną nazwę obiektu podczas uruchamiania zapytań przez połączone serwery.

zapytań dla procedura składowana może być tak podczas wykonywania na Linked Servers:

Select * 
From OPENQUERY([COM2\SQLEXPRESS], 'Exec Northwind.dbo.CustOrderHist ''CUST1''') as TB1 

Sprawdź z opcji, takich jak SET FMTONLY OFF podczas wykonywania procedury.

Śledź ten link do OPENQUERY: http://msdn.microsoft.com/en-us/library/ms188427.aspx

+0

Właśnie wpadłem na to ostatnio, próbując pomóc komuś innemu z połączonym serwerem. Chciałbym, aby komunikat o błędzie był bardziej opisowy. –

1

Miałem ten sam błąd podczas próby kwerendy przez serwer połączony. Jednak sprawdzałem widok na serwerze docelowym, a nie procedurę przechowywaną.

widok serwerze docelowym został stworzony tak:

CREATE VIEW vABC AS 
    SELECT ... FROM Table1 
    UNION ALL 
    SELECT ... FROM Table2 

Aby rozwiązać ten problem, zrobiłem alter widok, a owinięty dwa oświadczenia Unię w podzapytania, podobnie jak to:

CREATE VIEW vABC AS 
    SELECT * FROM (
     SELECT ... FROM Table1 
     UNION ALL 
     SELECT ... FROM Table2 
    ) T 

Musi to być problem z metadanymi z oryginalnym widokiem.

Mam nadzieję, że to pomoże!

1

Ten sam problem dla mnie: Rozwiązałem go po prostu naprawiając obiekt "docelowy", który nie został poprawnie nazwany.

W moim przypadku Szukałem [testDb].[Business.Customer] stole, ale poprawna nazwa była [testDb].[Business].[Customer] ... sam błąd jak Twoja:

Il dostawca OLE DB "SQLNCLI10" na serwer il collegato „RIBOWEB10 \ SQLEXPRESS "ha restituito il messaggio" Odroczone przygotowanie nie mogło zostać zakończone. ".

Myślę, że SQL Server próbuje dynamicznie rozwiązywać nazwy, które nie pasują bezpośrednio do rzeczywistych obiektów, ale nie jestem tego pewien.

dość łatwe, mam nadzieję, że to pomoże :)

1

Nawet jeśli nieprawidłowo nazwie kolumny w zapytaniu, idziesz, aby zobaczyć ten błąd.Przykład:

select * 
from openquery(
    lnksrv 
    ,'select top 10 * from db.schema.table where colunm = 10' 
) 

i nazwę kolumna column nie colunm.

Dolna linia to rzeczywiste zapytanie, które ma zostać wysłane do zdalnego serwera, aby uzyskać poprawność, a następnie zawiń je w openquery i przeprowadź ponownie test.

Powiązane problemy