web-dev-qa-db-fra.com

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

J'ai créé un fichier UDF qui accède au [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 le fichier UDF semble fonctionner correctement. IntelliSense remplit le nom de la vue pour moi, de sorte qu'il ne semble pas y avoir de problème.

J'ai aussi essayé de changer l'implémentation pour utiliser sys.objects _ au lieu de cette vue, mais le même avertissement a également été donné pour cette vue.

Comment puis-je résoudre cet avertissement?

88
Sam

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

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

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

159
Sam

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

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

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

Le changer de construction l'a corrigé.

3
Russell D

ce que Sam a dit est le meilleur moyen de le faire.
Toutefois, si vous avez un scénario qui vous oblige à déployer le dacpac à partir d’un ordinateur qui n’a pas cette référence à cet emplacement spécifique, vous risquez d’avoir des problèmes. Une autre méthode consiste à ouvrir votre fichier .project et à vous assurer que la balise suivante a la valeur false pour la configuration de construction que vous essayez d’exécuter.

<TreatTSqlWarningsAsErrors>false</TreatTSqlWarningsAsErrors>

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

2
tecfield