web-dev-qa-db-fra.com

Utilisation d'un serveur lié avec OPENQUERY dans un projet de base de données

J'ai un serveur SQL Server 2008 exécutant une base de données que je veux jeter dans TFS. Par conséquent, j'ai utilisé un projet de base de données Visual Studio 2013 dans lequel j'ai importé la base de données. Après avoir corrigé un tas d'erreurs, je suis bloqué avec une seule erreur:

Dans une vue, les développeurs ont utilisé OPENQUERY pour accéder à un serveur lié. J'ai donc importé un DACPAC qui contient la bonne base de données et je l'ai ajouté au projet en utilisant Add Database Reference en utilisant les options de référence suivantes.

Settings for Database Reference

Version initiale du script

Voici une version plus courte de la création de la vue d'origine:

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

Cela a conduit à l'erreur suivante:

Erreur 136 SQL71501: Affichage: [dbo]. [VwStatus] a une référence non résolue à l'objet [LinkedServer].

Premier essai

J'ai donc essayé d'insérer la variable de nom de serveur

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

Qui conduit à

Erreur 176 SQL46010: syntaxe incorrecte près de $ (LinkedServer).

D'autres tentatives

J'ai joué un peu autour et j'ai essayé ce qui suit (avec et sans activer les identifiants cités):

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 

Je reçois toujours une erreur.

Je n'ai aucune idée de ce que je néglige ici. Le faites vous? Merci pour votre temps!

(Malheureusement, je ne peux pas ajouter la balise visual-studio-2013, j'ai donc utilisé visual-studio)

10
Chake

J'ai réussi à le faire fonctionner:

J'ai créé un nouveau projet de base de données master. Là, j'ai créé un dossier Server Object et un fichier LinkedServer.sql. Dans le fichier SQL, j'ai ajouté le serveur lié:

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

Après avoir ajouté la base de données Project master à ma solution et l'avoir référencée dans mon projet de base de données d'origine, j'ai pu créer le projet en utilisant la syntaxe initiale;

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