ungelöster Verweis auf Objekt [INFORMATION_SCHEMA]. [TABLES]

99

Ich habe eine UDF erstellt, die auf die [INFORMATION_SCHEMA].[TABLES]Ansicht zugreift :

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

In Visual Studio sind sowohl das Schema als auch der Name für die Ansicht mit einer Warnung gekennzeichnet:

SQL71502: Funktion: [dbo]. [CountTables] hat einen ungelösten Verweis auf das Objekt [INFORMATION_SCHEMA]. [TABLES].

Ich kann das Datenbankprojekt weiterhin ohne Probleme veröffentlichen, und die UDF scheint korrekt zu laufen. IntelliSense füllt den Namen der Ansicht für mich aus, sodass es kein Problem damit zu geben scheint.

Ich habe auch versucht, die Implementierung so zu ändern, dass sie sys.objectsanstelle dieser Ansicht verwendet wird, aber ich habe die gleiche Warnung auch für diese Ansicht erhalten.

Wie kann ich diese Warnung beheben?

Sam
quelle

Antworten:

180

Fügen Sie einen Datenbankverweis hinzu zu master:

  1. Klicken Sie unter dem Projekt mit der rechten Maustaste auf Referenzen .
  2. Wählen Sie Datenbankverweis hinzufügen ... .
  3. Wählen Sie Systemdatenbank .
  4. Stellen Sie sicher, dass Master ausgewählt ist.
  5. Drücken Sie OK .

Beachten Sie, dass die Aktualisierung von VS eine Weile dauern kann.

Sam
quelle
6
Und nur eine Warnung - wenn jemand jene SSDT in einem anderen Pfad installiert ist, Sie könnten Probleme haben. Wir sind in unserem letzten Projekt darauf gestoßen, dass einige ein E: -Laufwerk und andere nur ein C: -Laufwerk hatten. Wir haben diese Referenzdatei kopiert und an einem freigegebenen Speicherort abgelegt, damit wir sie über. \ SharedSchemas \ master.dacpac referenzieren können. Das ist wahrscheinlich jetzt behoben, war aber ein Problem in der ersten Version.
Peter Schott
Peter Schott hat hier einen Punkt. Im Allgemeinen ist es eine gute Idee, referenzierte Dacpac-Dateien irgendwo in die Lösung zu kopieren und von dort aus zu verwenden.
Veysel Ozdemir
1
Für mich heißt es: "In Ihrem Projekt ist bereits ein Verweis auf diese Systemdatenbank vorhanden." Ich stecke jetzt fest!
Orad
1
Nur damit die nächste Person etwas Vernunft spart - ob Sie es glauben oder nicht einmal VS beenden -, musste ich neu starten, und dann begann die Einstellung zu funktionieren. Möglicherweise möchten Sie auch die Visual Studio-Optionen ... SQL Server-Tools ... Online-Bearbeitung ... öffnen und "Verweise auf Systemansichten und Master-Datenbankobjekte auflösen" aktivieren.
NYCdotNet
Ich habe das gleiche Problem unter Visual Studio 2017 und ich sehe nicht "Datenbankreferenz" unter der Referenzliste
Scarl
3

In unserem Projekt haben wir bereits einen Verweis auf Master, aber wir hatten dieses Problem. Hier war der Fehler, den wir bekommen haben:

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

Um den Referenzfehler zu beheben, klicken Sie in der SQL-Tabellendatei mit der rechten Maustaste auf Eigenschaften und überprüfen Sie, ob die BuildSettings auf Build festgelegt sind.

Das Ändern des Builds hat das Problem behoben.

Russell D.
quelle
2

Was Sam sagte, ist der beste Weg, dies zu tun.
Wenn Sie jedoch ein Szenario haben, in dem Sie den Dacpac von einem Computer aus bereitstellen müssen, auf dem diese Referenz an diesem bestimmten Speicherort nicht vorhanden ist, können Probleme auftreten. Eine andere Möglichkeit besteht darin, Ihre .project-Datei zu öffnen und sicherzustellen, dass das folgende Tag den Wert falsefür die Build-Konfiguration hat, die Sie ausführen möchten .

<TreatTSqlWarningsAsErrors>false</TreatTSqlWarningsAsErrors>

Auf diese Weise müssen Sie Ihrem Projekt keinen Verweis hinzufügen.

Tecfield
quelle
13
Dies sollte ein letzter Ausweg sein, da Sie das Feedback zu SQL-Fehlern verlieren!
Jowen