2009-07-24 8 views
11

Aktualnie korzystam z oprogramowania innej firmy, które używa SQL Server jako swojej bazy danych. Mam drugą instancję programu SQL Server działającą w innej lokalizacji, a niektóre aplikacje, które buduję w tej instancji SQL Server, muszą uzyskać dostęp do niektórych danych w oprogramowaniu innej firmy. Stworzyłem więc połączenie ODBC między polami i skonfigurowałem zewnętrzny serwer SQL jako serwer połączony w mojej wersji SQL Server. Jako test, wpadłem coś podobnego następującym stwierdzeniem z mojego serwera SQL, dostęp do jednego z tabelami innej firmy:Powiązana baza danych SQL Server z błędem "niespójne metadane"

SELECT * FROM LinkedServerName.SchemaName.dbo.TableName 

Na co otrzymywałem ten błąd:

OLE DB error trace [Non-interface error: Column 'TableRowVersion' (compile-time 
ordinal 4) of object '"SchemaName"."dbo"."TableName"' was reported to have a 
DBCOLUMNFLAGS_ISROWVER of 0 at compile time and 512 at run time]. 

Msg 7356, Level 16, State 1, Line 1 

OLE DB provider 'MSDASQL' supplied inconsistent metadata for a column. Metadata 
information was changed at execution time. 

Ten błąd jest to samo dla każdej innej tabeli, do której próbuję uzyskać dostęp. Co oznacza ten błąd i czy istnieje sposób jego obejścia?

Odpowiedz

27

Kilka razy zdarzyło mi się to zrobić. Jednym z obejść było użycie OPENQUERY.

SELECT * FROM OPENQUERY(LinkedServerName, 'SELECT * FROM DBName.Schema.Table') 

Również select ty pisał powyżej ma nieprawidłową nazwę 4 części (może być tylko literówka, ale nie był pewien). Powinno być LinkedServerName.DBName.SchemaName.TableName

7
Server: Msg 7356, Level 16, State 1, Line 1 

OLE DB provider 'MSDASQL' supplied inconsistent metadata for a column. 
Metadata information was changed at execution time. 

Jeśli używasz czteroczęściowej składni nazwy do zapytania danych z połączonej bazy danych serwera, może pojawić się ten komunikat o błędzie. Aby obejść ten problem, można użyć składni OPENQUERY do zapytania danych z połączonej bazy danych serwera. Możesz włączyć flagę śledzenia 7300, aby uzyskać bardziej szczegółowe informacje o tym komunikacie o błędzie. Aby włączyć znacznik śledzenia 7300, uruchom następującą instrukcję Transact-SQL:

DBCC TRACEON(7300) 
2

Rozwiązałem to z tym kroki

1) Krok 1:

• W SQL Server Management Studio otworzy Linked Servers, a następnie 'Nowy serwer połączony'.

• Wewnątrz pojawiającego się kreatora - wybierz kartę Ogólne.

• Podaj nazwę aliasu w polu "Serwer połączony".

• Wybierz SQL Native Client jako dostawcę.

• Dodaj serwer sql_server w polu "Nazwa produktu" (to magia).

• W "Data Source" - podaj nazwę hosta, który będzie używany jako serwer połączony.

2) Krok 2:

• W zakładce Zabezpieczenia - określ odpowiednie opcje zabezpieczeń (np kontekst zabezpieczeń)

3) Krok 3:

• W zakładce Opcje serwera - "Dostęp do danych", RPC, "Rpc Out" i "Use Remote Collaboration" są prawdziwe.

4) Krok 4:

• Ciesz.

http://alexpinsker.blogspot.com.br/2007/08/how-to-give-alias-to-sql-linked-server.html

+0

Ponieważ pytanie dotyczy połączenia do innego serwera MS SQL, a nie jakieś inne DBMS (MySQL, PostgreSQL, ...) Ta odpowiedź jest najbardziej ważny jeden w tym przypadku (native jest bardziej wydajnych niż ODBC). Ale nie zadziała, jeśli twój drugi serwer nie jest serwerem MS SQL – DestyNova

Powiązane problemy