Base de données SQL Server liée donnant des" métadonnées incohérentes " erreur

j'exécute actuellement une suite logicielle tierce, qui utilise SQL Server comme base de données. J'ai une deuxième instance de SQL Server tournant à un endroit différent, et certaines applications que je suis en train de construire dans cette instance SQL Server a besoin d'accéder à certaines données dans le logiciel tiers. Ainsi, j'ai créé une connexion ODBC entre les boîtes, et mis en place le serveur SQL tiers comme un serveur lié sur ma version de serveur SQL. Comme un test, j'ai couru quelque chose comme la déclaration suivante de mon SQL serveur, accédant à l'une des tables du tiers:

SELECT * FROM LinkedServerName.SchemaName.dbo.TableName

à laquelle j'ai reçu cette erreur:

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.

cette erreur est la même pour toute autre table à laquelle j'essaie d'accéder. Que signifie cette erreur signifie, et est-il un moyen de contourner cela?

13
demandé sur Lucas 2009-07-24 22:25:24

3 réponses

j'ai eu ce arrivé quelques fois. La solution que j'ai trouvée était D'utiliser OPENQUERY.

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

aussi, le select que vous avez posté ci-dessus a un nom de 4 parties incorrect (pourrait juste être une faute de frappe mais je n'étais pas sûr). Il devrait être LinkedServerName.DBName.SchemaName.TableName

35
répondu BrianD 2009-07-24 18:58:20
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.

si vous utilisez une syntaxe de nom en quatre parties pour interroger les données de la base de données du serveur lié, vous pouvez recevoir ce message d'erreur. Pour contourner ce problème, vous pouvez utiliser la syntaxe OPENQUERY pour interroger les données de la base de données du serveur lié. Vous pouvez activer trace flag 7300 pour recevoir des informations plus détaillées sur ce message d'erreur. Pour activer trace flag 7300, exécutez la déclaration Transact-SQL suivante:

DBCC TRACEON(7300)
7
répondu Raj 2009-07-24 18:50:56

j'ai résolu ce problème avec cette procédure

1) Étape 1:

* dans SQL Server Management Studio, ouvrez des serveurs liés et ensuite 'nouveau serveur lié'.

* à l'intérieur de l'Assistant apparu-sélectionnez l'onglet Général.

• spécifier le nom d'alias dans le champ" Linked server".

• Sélectionnez SQL Native Client en tant que fournisseur.

• ajouter sql_server dans le champ" Nom du produit " (c'est la magie).

• Dans La Source De Données" – spécifiez le nom de l'hôte à utiliser comme serveur lié.

2) Étape 2: