2009-01-30 9 views
20

J'ai ajouté un serveur lié, qui s'affiche dans la liste des serveurs liés, mais lorsque je l'interroge, il génère une erreur avec le nom du serveur DB.Interrogation d'un serveur SQL lié

EXEC sp_helpserver 
EXEC sp_addlinkedserver 'aa-db-dev01' 
Select * from openquery('aa-db-dev01','Select * from TestDB.dbo.users') 

Msg 102, niveau 15, état 1, ligne 1
syntaxe incorrecte près de 'aa-db-DEV01.

Répondre

30
SELECT * FROM [server].[database].[schema].[table] 

Cela fonctionne pour moi. SSMS IntelliSense peut toujours souligner cela comme une erreur de syntaxe, mais cela devrait fonctionner si votre serveur lié est configuré et que votre requête est correcte.

+0

De l'essai, je l'ai fait, tout nommage 4part fonctionne, il finit par être plus lent que d'utiliser openquery. –

+0

Cette approche ne fonctionnera pas non plus si la définition de votre table contient des types de colonne 'xml'. – Lankymart

+0

@ Hack-R est le serveur enregistré en tant que serveur lié? –

22

Vous devez supprimer les guillemets autour du nom du serveur lié. Il devrait ressembler à ceci:

Select * from openquery (aa-db-DEV01, 'Select * from TestDB.dbo.users')

+0

Vous perdez l'intellisense de cette façon alors allez dans l'autre sens si vous le pouvez du point de vue du développement mais vous devez utiliser de cette façon si le fournisseur n'expose pas le catalogue ou schéma. –

+0

Avec cette option, il y a une limite de 8000 caractères pour la requête. Je tente toujours de trouver une solution de contournement pour cela. 'exec (@Query) à LinkedServerName' semble être une solution pour cela, mais je ne peux pas joindre le résultat avec d'autres tables. Essayé d'utiliser des tables temporaires sans chance. –

5

Vous pouvez utiliser:

SELECT * FROM [aa-db-dev01].[TestDB].[dbo].[users]; 
+0

Cela ne fonctionne pas non-serveur -SQL-Serveur lié, entraînant ... Un schéma ou catalogue non valide a été spécifié pour le fournisseur "MSDASQL" pour le serveur lié "MyLinkedServer". – brewmanz

1

essayer Select * from openquery("aa-db-dev01",'Select * from users'), la connexion de base de données doit être définie dans il lié la configuration du serveur

1

J'utilise la requête ouverte pour effectuer cette tâche comme ceci:

select top 1 * 
INTO [DATABASE_TO_INSERT_INTO].[dbo].[TABLE_TO_SELECT_INTO] 
from openquery(
    [LINKED_SERVER_NAME], 
    'select * from [DATABASE_ON_LINKED_SERVER].[dbo].[TABLE_TO_SELECT_FROM]' 
) 

L'exemple ci-dessus utilise la requête ouverte pour sélectionner les données d'une base de données sur un serveur lié dans une base de données de votre choix.

Note: Pour l'intégralité de référence, vous pouvez effectuer un simple, sélectionnez comme ceci:

select top 1 * from openquery(
    [LINKED_SERVER_NAME], 
    'select * from [DATABASE_ON_LINKED_SERVER].[dbo].[TABLE_TO_SELECT_FROM]' 
) 
Questions connexes