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.
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].
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).
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)
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