Veuillez voir cette question sur stackoverflow:
J'utilise un pilote ODBC EasySoft pour lier une instance SQL Server 2008 R2 Express à Interbase et j'ai des difficultés à obtenir des métadonnées à partir du serveur distant. En regardant sur le net, les principales suggestions mentionnent toutes l'utilisation d'OPENQUERY au lieu de la syntaxe du serveur lié en quatre parties.
EG Mon approche actuelle (problématique) est ...
CREATE VIEW [LIVE].[vwPRDETS] AS SELECT * FROM [LBLIVE]...[PRDETS] WITH (NOLOCK)
Mais sur certaines tables, j'obtiens l'erreur lors de l'appel de la vue ...
Msg 7353, niveau 16, état 1, ligne 1 Le fournisseur OLE DB "MSDASQL" pour le serveur lié "LBLIVE" a fourni des métadonnées incohérentes. Une colonne supplémentaire a été fournie lors de l'exécution et n'a pas été trouvée au moment de la compilation.
De plus, certaines vues que je ne peux même pas créer car j'obtiens ce qui suit ...
Msg 7315, niveau 16, état 1, ligne 1 Le fournisseur OLE DB "MSDASQL" pour le serveur lié "LBLIVE" contient plusieurs tables qui correspondent au nom "" SYSDBA "." AUDIT_LBABKP "".
Bien qu'il n'y ait qu'un seul des tableaux mentionnés.
L'approche alternative de la recherche sur le net semble être plus comme ...
SELECT * FROM OPENQUERY(<linked sevrer>, 'SELECT <column list> FROM MyTable')
Donc, ma question est, si j'utilise OPENQUERY dans ma définition de vue, SQL Server pourra-t-il optimiser le SQL résultant envoyé à Interbase? Ou n'y a-t-il vraiment pas beaucoup de différence entre les deux approches?
C'est un sujet croisé et j'adorerais le POV d'un dba.
la source