Utilizzo di un server collegato con OPENQUERY in un progetto di database


10

Ho un SQL Server 2008 che esegue un database che voglio lanciare in TFS. Pertanto ho utilizzato un progetto di database di Visual Studio 2013 in cui ho importato il DB. Dopo aver corretto un mucchio di errori sono bloccato con solo un errore rimasto:

In una vista gli sviluppatori utilizzati OPENQUERYper accedere a un server collegato. Quindi ho importato un DACPAC che contiene il database giusto e l'ho aggiunto al progetto Add Database Referenceusando le seguenti opzioni di riferimento.

Impostazioni per riferimento al database

Versione script iniziale

Ecco una versione più breve della creazione della vista originale:

CREATE VIEW dbo.vwStatus
AS
SELECT     StatusID, StatusName
FROM       OPENQUERY(LinkedServer, 'SELECT * FROM [DB].[dbo].tbStatus') AS derivedtbl_1

Ciò ha portato al seguente errore:

Errore 136 SQL71501: Visualizza: [dbo]. [VwStatus] ha un riferimento non risolto all'oggetto [LinkedServer].

Primo tentativo

Quindi ho provato a inserire la variabile del nome del server

FROM       OPENQUERY($(LinkedServer), 'SELECT * FROM [DB].[dbo].tbStatus') AS derivedtbl_1

Che conduce a

Errore 176 SQL46010: sintassi errata vicino a $ (LinkedServer).

Ulteriori tentativi

Ho armeggiato un po 'intorno e ho provato quanto segue (con e senza aver abilitato gli identificatori tra virgolette):

FROM       OPENQUERY("$(LinkedServer)", 'SELECT * FROM [DB].[dbo].tbStatus') AS 
FROM       OPENQUERY([$(LinkedServer)], 'SELECT * FROM [DB].[dbo].tbStatus') AS 
FROM       OPENQUERY([LinkedServer], 'SELECT * FROM [DB].[dbo].tbStatus') AS 
FROM       OPENQUERY("LinkedServer", 'SELECT * FROM [DB].[dbo].tbStatus') AS 

Ricevo sempre un errore.

Non ho idea di cosa sto trascurando qui. Fai? Grazie per il tuo tempo!

(Purtroppo non posso aggiungere il tag visual-studio-2013, quindi ho usato visual-studio)

Risposte:


9

Sono riuscito a farlo funzionare:

Ho creato un nuovo progetto di database master. Lì ho creato una cartella Server Objecte un file LinkedServer.sql. Nel file SQL ho aggiunto il server collegato:

GO
EXECUTE sp_addlinkedserver @server = N'LinkedServer', @srvproduct = N'sqlserver', @provider = N'SQLNCLI', @datasrc = N'LinkedServer.domain';

Dopo aver aggiunto il progetto Database masteralla mia soluzione e averlo fatto riferimento nel mio progetto di database originale, sono stato in grado di costruire il progetto usando la sintassi iniziale;

CREATE VIEW dbo.vwStatus
AS
SELECT     StatusID, StatusName
FROM       OPENQUERY(LinkedServer, 'SELECT * FROM [DB].[dbo].tbStatus') AS derivedtbl_1

Non riesco ancora a farlo funzionare nonostante abbia un progetto principale con il file LinkedServers.sql lì
prova il

Bene, è difficile aiutare senza qualche informazione in più. forse è meglio fare un'altra domanda. È importante fare riferimento al tuo progetto principale nella tua soluzione. altrimenti questo ha funzionato per me esattamente come descritto.
Chake,

All'interno della tua soluzione - hai un dacpac (s) o progetti con i DBA LinkedServer?
Martin Meeser,

Ciao, non ricordo, ma nel secondo paragrafo ho scritto che ho usato i dacpac. Ma per la soluzione finale ho fatto riferimento a un progetto di database per il DB master.
Chake,

1
Nota che devi assicurarti che il tuo file 'LinkedServer.sql' abbia impostato build su 'Build'. In modo fastidioso VS non sembra riconoscere il server collegato da uno script di pre-distribuzione, o tutto ciò non sarebbe necessario.
Taran,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.