2009-01-30 14 views
20

Ho aggiunto un server collegato, che viene visualizzato nell'elenco dei server collegati, ma quando lo interrogo, genera un errore con il nome del server db.Interrogare un server sql collegato

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

Msg 102, livello 15, stato 1, riga 1
la sintassi non corretta in prossimità 'aa-db-dev01'.

risposta

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

questo funziona per me. SSMS intellisense può ancora sottolineare questo come un errore di sintassi, ma dovrebbe funzionare se il server collegato è configurato e la tua query è altrimenti corretta.

+0

Dal test che ho fatto, mentre 4part nomi funziona, si finisce per essere più lento rispetto all'utilizzo di OPENQUERY. –

+0

Anche questo approccio non funzionerà se la definizione della tabella contiene tipi di colonna 'xml'. – Lankymart

+0

@ Hack-R è il server registrato come linkato? –

22

È necessario rimuovere le virgolette attorno al nome del server collegato. Dovrebbe essere simile a questo:

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

+0

Si perde intellisense in questo modo, quindi si può andare dall'altra parte se possibile dal punto di vista dello sviluppo, ma si deve utilizzare in questo modo se il provider non espone il catalogo o schema. –

+0

Con questa opzione, c'è un limite di 8000 caratteri per la query. Sto ancora cercando di trovare una soluzione per questo. 'exec (@Query) in LinkedServerName' sembra una soluzione per questo, ma non posso unire il risultato con altre tabelle. Ho provato a usare tavoli temporanei senza fortuna. –

5

È possibile utilizzare:

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

Questo NON FUNZIONA non alcuni server collegati a SQL Server, con conseguente ... Uno schema o un catalogo non valido è stato specificato per il provider "MSDASQL" per il server collegato "MyLinkedServer". – brewmanz

1

prova Select * from openquery("aa-db-dev01",'Select * from users'), la connessione al database dovrebbero essere definiti in lui legato configurazione del server

1

io uso di query aperta per eseguire questa operazione in questo modo:

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'esempio precedente utilizza query aperta per selezionare i dati da un database su un server collegato in un database di propria scelta.

Nota: Per completezza di riferimento, è possibile eseguire un semplice selezionare in questo modo:

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