nierozwiązane odniesienie do obiektu [INFORMATION_SCHEMA]. [TABLES]

100

Utworzyłem UDF, który ma dostęp do [INFORMATION_SCHEMA].[TABLES]widoku:

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

W programie Visual Studio schemat i nazwa widoku są oznaczone ostrzeżeniem:

SQL71502: Funkcja: [dbo]. [Tabele zliczeń] ma nierozwiązane odwołanie do obiektu [SCHEMAT_ INFORMACJI]. [TABELE].

Nadal mogę bez problemu opublikować projekt bazy danych, a UDF wydaje się działać poprawnie. Technologia IntelliSense wypełnia dla mnie nazwę widoku, więc nie wydaje się, że ma z tym problem.

Próbowałem również zmienić implementację, aby używać sys.objectszamiast tego widoku, ale otrzymałem to samo ostrzeżenie również dla tego widoku.

Jak mogę rozwiązać to ostrzeżenie?

Sam
źródło

Odpowiedzi:

182

Dodaj odwołanie do bazy danych do master:

  1. W projekcie kliknij prawym przyciskiem myszy References .
  2. Wybierz odniesienie dodawania bazy danych ... .
  3. Wybierz Baza danych systemu .
  4. Upewnij się, że wybrano wzorzec .
  5. Wciśnij OK .

Pamiętaj, że aktualizacja VS może zająć trochę czasu.

Sam
źródło
6
I tylko ostrzeżenie - jeśli ktoś ma te SSDT zainstalowany w innej ścieżce, to może mieć problemy. Napotkaliśmy to w naszym ostatnim projekcie, w którym niektórzy mieli napęd E:, a inni tylko C:. Skopiowaliśmy ten plik referencyjny i umieściliśmy go we współdzielonej lokalizacji, abyśmy mogli się do niego odwołać za pośrednictwem. \ SharedSchemas \ master.dacpac. Prawdopodobnie został już rozwiązany, ale był to problem w pierwszym wydaniu.
Peter Schott,
Peter Schott ma tutaj rację. Generalnie dobrym pomysłem jest skopiowanie plików dacpac, do których istnieją odniesienia, gdzieś wewnątrz rozwiązania i użycie z tego miejsca.
Veysel Ozdemir
1
Dla mnie jest napisane: „Odniesienie do tej bazy danych systemu już istnieje w Twoim projekcie”. Teraz utknąłem!
orad
1
Tylko dla następnej osoby, aby zaoszczędzić trochę zdrowia psychicznego - wierz lub nawet nie rzucenie VS nie wystarczyło, aby to się utrzymać - musiałem zrestartować komputer, a potem ustawienie zaczęło działać. Możesz również chcieć otworzyć Opcje programu Visual Studio ... Narzędzia SQL Server ... Edycja online ... włączyć "Rozpoznawanie odwołań do widoków systemowych i obiektów bazy danych master".
NYCdotNet
Mam ten sam problem w programie Visual Studio 2017 i nie widzę „Odniesienia do bazy danych” pod listą referencyjną
Scarl
3

W naszym projekcie mamy już odniesienie do mastera, ale mieliśmy ten problem. Oto błąd, który otrzymaliśmy:

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

Aby rozwiązać błąd odwołania, w pliku sql tabeli kliknij prawym przyciskiem myszy właściwości i sprawdź, czy ustawienia BuildSettings są ustawione na Build.

Zmiana kompilacji naprawiła to.

Russell D.
źródło
W VS 2019 miałem problem z projektem bazy danych, który został pierwotnie zbudowany w 2017 roku. Aby go naprawić, musiałem usunąć i ponownie dodać odniesienie do „master”
Alan Hadsell
2

to, co powiedział Sam, jest najlepszym sposobem na zrobienie tego.
Jeśli jednak masz scenariusz, w którym musisz wdrożyć dacpac z maszyny, która nie ma tego odniesienia w tej konkretnej lokalizacji, możesz mieć kłopoty. Innym sposobem jest otwarcie pliku .project i upewnienie się, że następujący znacznik ma wartość falsedla konfiguracji kompilacji, którą próbujesz uruchomić.

<TreatTSqlWarningsAsErrors>false</TreatTSqlWarningsAsErrors>

W ten sposób nie musisz dodawać odwołania do swojego projektu.

tecfield
źródło
13
Powinna to być ostatnia deska ratunku, ponieważ tracisz opinie o błędach sql!
Jowen,