2013-05-06 8 views
14

Si sta utilizzando una versione di prova di Azure. Stiamo cercando di eseguire query inter-server dal nostro SQL 2012 in-house.Impossibile richiamare i server collegati in Sql Azure

Sembra che il 2012 locale sia collegato con Azure. Quando entro Server Object ->Linked Servers in studio di gestione, vedo il nostro database Azure.

Ma se provo ad aprire il catalogo e tabelle, ricevo un messaggio di errore che dice

Reference to database and/or server name in 'Perseus.sys.sp_tables_rowset2' is not supported in this version of SQL Server

** Perseo è il nome del nostro catalogo in Azure Sql.

Esecuzione di una query da connessione locale:

SELECT * FROM [azureDBServer].[Perseus].[dbo].[accounts] 

risultato è:

OLE DB provider "SQLNCLI11" for linked server "azureDBServer" returned message 
"Unspecified error". Msg 40515, Level 16, State 2, Line 1 Reference to database and/or 
server name in 'Perseus.sys.sp_tables_info_90_rowset' is not supported in this version of 
SQL Server. 

Questo stesso in casa di SQL 2012 Server è in grado di connettersi al nostro in-house 2008 da query di server trasversali e visualizzando la sua struttura tramite i server collegati.

So da questo articolo Azure supports Linked Servers.

Quindi mi sono perso per quello che è sbagliato. Il nostro amministratore pensa che potrebbe essere che abbiamo un account Web-Sql vs un account SQL aziendale. Questo collegamento allo stack obsoleto Azure Web vs Business SQL implica che la versione SQL NON è il problema, ma pre-date quando Azure ha offerto server collegati.

Quindi, sto cercando di capire se

a) non abbiamo istituito qualcosa di giusto per fornire SQL Linking?

b) siamo limitati da prova?

c) siamo limitati dalla versione Web SQL?

d) altro?

+1

È Azure l'origine o la destinazione per il server collegato? Credo che funzioni solo se Azure è il target di un server SQL on-premise. – Jaxidian

+1

@Jaxidian corretta, Azure è bersaglio e mentre Azure è registrato sotto 'Linked Servers' del nostro server in-house, siamo in grado di Cross-leggere da Azure tramite il nostro in-house 2012 –

+1

@Jaxidian, sì, abbiamo anche provato una semplice query tra server. vedi la mia modifica –

risposta

7

Durante l'aggiunta del server collegato da Gestione SQL, non viene fornita l'opzione per impostare il database predefinito. Quindi usare qualcosa di simile sotto

EXEC sp_addlinkedserver 
@server='name for referring locally', -- here you can specify the name of the linked server 
@srvproduct='',  
@provider='sqlncli', -- using SQL Server native client 
@datasrc='AzureMachineName.database.windows.net', -- add here your server name 
@location='', 
@provstr='', 
@catalog='yourdatabasename' 

ho pensato che questo funziona.

+4

ottengo l'errore: Impossibile trovare stored procedure 'sp_addlinkedserver'. Anche usando db sql di Azure. –

7

È necessario eseguire le seguenti tre stored procedure per aggiungere SQL Azure. Utilizzando al di sotto di queste stored procedure sono stato in grado di interrogare SQL azzurro.

EXEC sp_addlinkedserver 
@server='PROD', 
@srvproduct='',  
@provider='sqlncli', 
@datasrc='azureserver.database.windows.net', 
@location='', 
@provstr='', 
@catalog='database name' 


EXEC sp_addlinkedsrvlogin 
@rmtsrvname = 'PROD', 
@useself = 'false', 
@rmtuser = 'Azure login', 
@rmtpassword = 'password' 

EXEC sp_serveroption 'PROD', 'rpc out', true 
+0

Posso solo aggiungere che server = 'PROD' era uguale al valore dell'origine dati nel mio caso. Molte grazie. – ozzy432836

+0

Eccellente! proprio quello di cui avevo bisogno –

1

Avete effettivamente impostato la connessione al database di Perseus? Osservando il messaggio di errore, si invia una query con un nome di parte 3 o 4 parti ad Azure che non funziona come in Azure. Si prega di verificare la query e impostarla per utilizzare 2 parti nome e solo tre parti nome se si connette allo stesso database

+1

Questo non fornisce una risposta alla domanda. Per criticare o richiedere chiarimenti da un autore, lascia un commento sotto il loro post. - [Dalla recensione] (/ recensione/bassa qualità-messaggi/10.967.835) – dotnetom

+0

la risposta è all'errore, in 3 parti/4 nomi delle parti non funziona in Azure e la query deve modificare –

+0

accordo @dotnetom, questa risposta davvero dovrebbe essere un commento Sorpreso che sia sopravvissuto così a lungo ... Sembra che abbia alzato una bandiera esattamente per quella ragione e per i moderatori, nella loro infinita "saggezza" sentiva che questa era una risposta. –

0

Ho avuto lo stesso problema, sarà risolto anche se non si utilizza l'asterisco nel SELEZIONA parte.

SELECT Row1, Row2 FROM table 

funzionerà

SELECT * FROM table 

wont

+0

Si prega di elaborare? Non capisco che asterisco ha a che fare con le tabelle collegate. E il tuo esempio mi confonde, non sembra che tu faccia riferimento a tabelle da database esterni. La sintassi tipica per i database collegati è 'SELECT * FROM [Nome server DB]. [DB/Catalogo]. [Dbo]. [Nome tabella]'. L'uso del solo nome della tabella lascia fuori il collegamento. –