2009-07-24 29 views
11

Attualmente sto eseguendo una suite software di terze parti, che utilizza SQL Server come database. Ho una seconda istanza di SQL Server in esecuzione in una posizione diversa e alcune app che sto creando in quell'istanza SQL Server deve accedere ad alcuni dati nel software di terze parti. Quindi, ho creato una connessione ODBC tra le caselle e configurato il server SQL di terze parti come server collegato sulla mia versione di SQL Server. Come test, mi sono imbattuto qualcosa come la seguente dichiarazione del mio server SQL, l'accesso a uno dei tavoli del terze parti:Database SQL Server collegato con errore "metadati incoerenti"

SELECT * FROM LinkedServerName.SchemaName.dbo.TableName 

Al che ho ricevuto questo errore:

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. 

Questo errore è il lo stesso per qualsiasi altro tavolo provo ad accedere. Cosa significa questo errore e c'è un modo per aggirarlo?

risposta

27

Ho avuto questo problema alcune volte. L'unica soluzione che ho trovato era usare OPENQUERY.

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

Inoltre, il selezionare hai postato sopra ha un nome di 4 parte non corretta (potrebbe essere solo un errore di battitura, ma non ero sicuro). Dovrebbe essere 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. 

Se si utilizza un nome di sintassi in quattro parti per interrogare i dati dal database server collegato, potresti ricevere questo messaggio di errore. Per ovviare a questo problema, è possibile utilizzare la sintassi OPENQUERY per interrogare i dati dal database del server collegato. È possibile attivare il flag di traccia 7300 per ricevere informazioni più dettagliate su questo messaggio di errore. Per attivare il flag di traccia 7300, eseguire la seguente istruzione Transact-SQL:

DBCC TRACEON(7300) 
2

Ho risolto questo con questa procedura

1) Fase 1:

• In SQL Server Management Studio aprire server collegati e poi 'Nuovo server collegato'.

• Interno del wizard visualizzato - Selezionare la scheda Generale.

• Specificare il nome alias nel campo "Server collegato".

• Selezionare SQL Native Client come provider.

• Aggiungi sql_server nel campo "Nome prodotto" (questa è la magia).

• In "Origine dati": specificare il nome dell'host da utilizzare come server collegato.

2) Fase 2:

• Nella scheda Sicurezza - specificare le opzioni di sicurezza appropriate (ad esempio, il contesto di protezione)

3) Fase 3:

• Nella scheda Opzioni server - inserire "Data Access", RPC, "Rpc Out" e "Use Remote Collaboration" per essere veri.

4) Fase 4:

• Godetevi.

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

+0

Dal momento che la domanda è su un collegamento a un altro server MS SQL e non alcuni altri DBMS (MySQL, PostgreSQL, ...) questa risposta è la più valida per questo caso (nativo è il modo più performante di ODBC). Ma non funzionerà se il tuo secondo server non è un server MS SQL – DestyNova

Problemi correlati