web-dev-qa-db-fra.com

Projet SSDT avec des références de serveur liées au travail Obtient SQL71562 Avertissement

J'ai une solution vs 2013 avec deux projets de base de données.

L'un d'entre eux, appelons-le que le "travailleur" est censé être déployé sur environ 10 serveurs de production différents.

L'autre, qui est censé fonctionner comme une instance "contrôleur", est essentiellement supposé exécuter différentes procédures stockées sur la base de données "Travailleur" sur les 10 serveurs de production.

Donc, pour réaliser cela, j'ai scripté 10 objets serveur liés dans le "contrôleur" et appelez les différents SP dans les bases de données "Travailleur".

Voici un exemple pour les scripts de serveur liés:

EXEC sp_addlinkedserver @server = N'PROD1', @srvproduct=N'SQLSERVER', @provider=N'SQLNCLI', @datasrc=N'1.2.3.4\prod1'
GO
EXEC sp_addlinkedsrvlogin @rmtsrvname=N'PROD1',@useself=N'False',@locallogin=NULL,@rmtuser=N'aaaaa',@rmtpassword='aaaaa'
GO
EXEC sp_serveroption @server=N'PROD1', @optname=N'rpc', @optvalue=N'true'
GO
EXEC sp_serveroption @server=N'PROD1', @optname=N'rpc out', @optvalue=N'true'
GO

Jusqu'à présent, ces travaux et les serveurs liés sont créés sur le contrôleur SQL Server et je peux les utiliser.

MAIS:
[.____] Dans le projet/solution SSDT, je reçois des références brisées chaque fois que j'utilise les objets de serveur liés. Bien sûr, le schéma n'est pas au courant des noms de serveurs liés, car ils ne sont que dans une constante de chaîne dans le script ci-dessus.

Échantillon: (J'ai traduit le message par moi-même, aucune garantie c'est exactement juste)

AVERTISSEMENT 14 SQL71562: "Procédure: [DB1]. [SP1]" Contient une interprétation non résolue à l'objet [PROD1]. [DB1]. [DB]. [SP1] ".

Mon problème est donc que j'ai une sorte de référence du schéma de base de données du contrôleur au schéma de base de données "travailleur", mais je ne peux pas utiliser/insérer une référence de base de données, car j'utilise plusieurs références différentes (10 serveurs de production) à " Accès "Le schéma du travailleur ... Je ne veux pas ajouter 10 références de base de données à mon projet avec l'option" Autreserver "(même si je pouvais, je suppose que cela ne permettra pas d'ajouter 10 références au même projet de base de données. ..)

J'ai le sentiment qu'il devrait être possible d'aborder les objets serveur liés de manière correcte dans la solution, mais je ne peux pas comprendre comment.

J'ai essayé la suggestion d'Aaron avec Synonymes, mais là, je me termine dans le même problème dès que j'utilise le nom du serveur lié, ce qui entraîne des objets inconnus "derrière" le nom.

J'ai édité la question de rendre le problème plus clair et j'espère que quiconque a une idée, car je veux une solution propre sans des centaines de messages d'avertissement.

4
Magier

Selon le message indiqué dans la question, il s'agit d'un avertissement ("warnung") et non une erreur. Une erreur arrêtera le processus de construction et empêchera le projet d'être publié sur le serveur. Les avertissements se présentent simplement dans la fenêtre "Liste d'erreurs", mais n'empêchent pas les processus de construction ou de publication de terminer.

J'ai créé un projet de base de données dans Visual Studio 2013 et ajouté une procédure stockée sélectionnée à partir d'un serveur lié. Si le nom du serveur lié ne correspond pas à un serveur lié à lien valide sur SQL Server, il y avait une erreur de publication comme indiqué par SQL Server (pas Visual Studio). Sinon, tout a fonctionné comme prévu. Mais dans les deux cas, ma référence de serveur liée dans cette procédure stockée dans Visual Studio a été soulignée en bleu et le message suivant est apparu dans la fenêtre "Liste d'erreurs" après la fin de la construction:

Warning 2   SQL71562: Procedure: [dbo].[GetExpressDBs] has an unresolved reference to
            object [LStoSqlExpress2014].[master].[sys].[databases].

Si vous ne voulez pas voir ces avertissements, vous pouvez faire deux choses:

  1. Vous ne pouvez tout simplement pas les montrer dans la fenêtre "Liste d'erreurs" en cliquant sur le bouton en haut de la fenêtre "Liste d'erreurs" indiquant "X de Y Avertissement (s)". Si vous faites cela, vous ne verrez aucun avertissement ici (même des avertissements liés au serveur non liés), mais votre code affichera toujours les soulignements bleus qui afficheront l'avertissement si vous la survolez.

  2. Vous pouvez dire que Visual Studio/SSDT d'ignorer ces avertissements spécifiques (mais montrez toujours les autres) en procédant comme suit:

    1. Aller aux propriétés du projet
    2. Aller à l'onglet "Build"
    3. Entrez les éléments suivants dans les champs "Supprimer Transact-SQL:" Texte de texte:
      [.____] 71562

    Faire les étapes mentionnées ci-dessus empêchera que cet unique avertissement spécifique ne s'affiche dans la fenêtre "Liste d'erreurs" ainsi que les soulignements bleus dans le code à l'aide des serveurs liés.

2
Solomon Rutzky