web-dev-qa-db-fra.com

À l'aide de SSDT, comment puis-je résoudre les erreurs SQL71561 lorsque j'ai une vue qui référence des objets dans une base de données différente?

J'ai un projet de base de données dans SSDT et lorsque j'importe une vue qui fait référence à des objets dans une base de données différente, j'obtiens l'erreur SQL71561, avec une description dans les lignes suivantes:

Erreur 4 SQL71561: Affichage: [schéma]. [Nom de vue] a une référence non résolue à l'objet [autre_db]. [Schéma]. [Table]. [Colonne]

J'ai passé un peu de temps à essayer de comprendre cela, alors pour aider les autres à le rencontrer, je publierai la réponse qui a fonctionné pour moi.

21
Jeff Ogata

Pour résoudre ce problème, j'ai ajouté une référence à l'autre base de données en effaçant le champ "Variable de base de données" de la boîte de dialogue. Si je n'effaçais pas ce champ, lors d'une comparaison de schéma, SSDT générerait le script de mise à jour à l'aide du nom de variable de la base de données, ce qui échouerait.

  1. Ajoutez un Référence de la base de données au projet.
  2. Dans mon cas, l’autre base de données était un autre projet de la même solution et j’ai donc pu la sélectionner dans le premier menu déroulant de la boîte de dialogue "Ajouter une référence à une base de données".
  3. Assurez-vous que le texte du champ "Nom de la base de données" est correct.
  4. Effacez le champ "Variable de base de données".

Examinez le texte "Exemple d'utilisation" et vérifiez qu'il se présente comme prévu. Cliquez sur "OK" pour ajouter la référence et cela devrait résoudre les erreurs de "référence non résolue".

Après cela, j'ai été capable de faire une comparaison de schéma, mais essayer de générer le projet a généré l'erreur suivante:

Erreur 408 SQL00208: Nom d'objet non valide 'db.schema.table'.

Activer les propriétés du projet et décocher la case "Activer la vérification Transact-SQL étendue pour les objets communs" a permis au projet de générer avec succès.

27
Jeff Ogata

Mon problème venait d'une vue. Dans la vue que j'avais.

...FROM [MyDatabase].[dbo].[MyTable]

Je l'ai remplacé par ...

...FROM [MyTable]

La raison en est que vous importez peut-être bacpac/dacpac dans un nom de base de données différent, de sorte que la référence à [MyDatabase] peut ne pas être valide.

9
Jason Geiger

Ces erreurs ont commencé à apparaître pour moi lorsque j'ai modifié Propriétés du projet> Plate-forme cible de SQL Server 2016 à SQL Server 2014.

Dans mon scénario, j'ai une base de données créée par un outil externe dans un projet SSDT (A) et mes vues SQL, etc. dans un autre projet (B) avec une référence de B-> A.

Après avoir évolué par rapport à SQL 2016, j'ai découvert que notre environnement de test fonctionnait en 2014 et j'ai donc modifié la plate-forme cible en (B) pour pouvoir la déployer. (A) n'est pas déployé - l'outil externe est également installé et configuré pour produire la même base de données.

Étrangement, j'ai pu par la suite modifier des vues en (B) et publier, mais je voulais ensuite supprimer une colonne. À ce stade, la publication échouait en raison de ces erreurs de référence. Le passage de la plate-forme cible du projet (A) à 2014 a ensuite effacé l'erreur et m'a permis de continuer.

0
robaker

Vous pouvez le rencontrer si votre ordre de génération est incorrect. 

Je me suis heurté à cela lors de l'extraction d'une nouvelle copie d'un projet du contrôle de code source et de la création d'une solution. 

Si une référence ne fonctionne pas, assurez-vous de générer la base de données référencée [other_db]. Une fois que j'ai construit le [other_db], mes références ont fonctionné.

0
fhilton