référence non résolue à l'objet [INFORMATION_SCHEMA]. [TABLES]

99

J'ai créé un UDF qui accède à la [INFORMATION_SCHEMA].[TABLES]vue:

CREATE FUNCTION [dbo].[CountTables]
(
    @name sysname
)
RETURNS INT
AS
BEGIN
    RETURN
    (
        SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = @name
    );
END

Dans Visual Studio, le schéma et le nom de la vue sont tous deux marqués d'un avertissement:

SQL71502: Fonction: [dbo]. [CountTables] a une référence non résolue à l'objet [INFORMATION_SCHEMA]. [TABLES].

Je peux toujours publier le projet de base de données sans aucun problème et l'UDF semble fonctionner correctement. IntelliSense renseigne le nom de la vue pour moi, il ne semble donc pas y avoir de problème.

J'ai également essayé de changer l'implémentation à utiliser à la sys.objectsplace de cette vue, mais j'ai également reçu le même avertissement pour cette vue.

Comment puis-je résoudre cet avertissement?

Sam
la source

Réponses:

180

Ajoutez une référence de base de données à master:

  1. Sous le projet, cliquez avec le bouton droit sur Références .
  2. Sélectionnez la référence de base de données ... Ajouter .
  3. Sélectionnez Base de données système .
  4. Assurez-vous que le maître est sélectionné.
  5. Appuyez sur OK .

Notez que la mise à jour de VS peut prendre un certain temps.

Sam
la source
6
Et juste un avertissement - si quelqu'un a installé ces SSDT dans un chemin différent, vous pourriez avoir des problèmes. Nous avons rencontré cela dans notre dernier projet où certains avaient un lecteur E: et d'autres juste un lecteur C:. Nous avons copié ce fichier de référence et l'avons placé dans un emplacement partagé afin de pouvoir le référencer via. \ SharedSchemas \ master.dacpac. C'est probablement résolu maintenant, mais c'était un problème dans la première version.
Peter Schott
Peter Schott a un point ici. C'est généralement une bonne idée de copier les fichiers dacpac référencés quelque part dans la solution et de les utiliser à partir de là.
Veysel Ozdemir
1
Pour moi, il dit "Une référence à cette base de données système existe déjà dans votre projet." Je suis coincé maintenant!
orad
1
Juste pour que la personne suivante sauve un peu de raison - croyez-le ou même pas quitter VS ne suffisait pas pour que cela colle - j'ai dû redémarrer, puis le paramètre a commencé à fonctionner. Vous pouvez également ouvrir les options de Visual Studio ... Outils SQL Server ... Edition en ligne ... activer "Résoudre les références aux vues système et aux objets de la base de données principale".
NYCdotNet
J'ai le même problème sous Visual Studio 2017 et je ne vois pas "Référence DataBase" sous la liste de référence
Scarl
3

Dans notre projet, nous avons déjà une référence à master, mais nous avons eu ce problème. Voici l'erreur que nous avons obtenue:

SQL71502: Procedure: [Schema].[StoredProc1] has an unresolved reference to object [Schema].[Table1].[Property1].

Pour résoudre l'erreur de référence, sur le fichier sql de la table, cliquez avec le bouton droit sur Propriétés et vérifiez que BuildSettings est défini sur Build.

Le changer de build l'a corrigé.

Russell D
la source
2

ce que Sam a dit est la meilleure façon de faire cela.
Cependant, si vous avez un scénario dans lequel vous devez déployer le dacpac à partir d'une machine qui n'a pas cette référence à cet emplacement spécifique, vous pouvez avoir des problèmes. Une autre méthode consiste à ouvrir votre fichier .project et à vous assurer que la balise suivante a la valeur de falsepour la configuration de construction que vous essayez d'exécuter.

<TreatTSqlWarningsAsErrors>false</TreatTSqlWarningsAsErrors>

De cette façon, vous n'avez pas besoin d'ajouter une référence à votre projet.

Tecfield
la source
13
Cela devrait être un dernier recours, car vous perdez les commentaires sur les erreurs SQL!
Jowen