неразрешенная ссылка на объект [INFORMATION_SCHEMA]. [TABLES]


99

Я создал UDF, который обращается к [INFORMATION_SCHEMA].[TABLES]представлению:

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

В Visual Studio схема и имя представления помечены предупреждением:

SQL71502: Функция: [dbo]. [CountTables] имеет неразрешенную ссылку на объект [INFORMATION_SCHEMA]. [TABLES].

Я все еще могу опубликовать проект базы данных без каких-либо проблем, и UDF, похоже, работает правильно. IntelliSense заполняет имя представления для меня, поэтому, похоже, с ним нет проблем.

Я также попытался изменить реализацию, чтобы использовать sys.objectsвместо этого представления, но я получил такое же предупреждение и для этого представления.

Как я могу устранить это предупреждение?

Ответы:


180

Добавьте ссылку на базу данных master:

  1. Под проектом щелкните правой кнопкой мыши Ссылки .
  2. Выбор ссылки Добавить базу данных ... .
  3. Выберите Системную базу данных .
  4. Убедитесь, что выбран мастер .
  5. Нажмите ОК .

Обратите внимание, что обновление VS может занять некоторое время.


6
И просто предупреждение - если у кого-то эти SSDT установлены по другому пути, у вас могут быть проблемы. Мы столкнулись с этим в нашем последнем проекте, где у некоторых был диск E :, а у других только диск C :. Мы скопировали этот справочный файл и поместили его в общую папку, чтобы мы могли ссылаться на него через. \ SharedSchemas \ master.dacpac. Вероятно, сейчас это решено, но проблема была в первом выпуске.
Питер Шотт,

Питер Шотт прав. Обычно рекомендуется скопировать файлы dacpac, на которые имеются ссылки, где-нибудь внутри решения и использовать их оттуда.
Veysel Ozdemir

1
Для меня это говорит: «Ссылка на эту системную базу данных уже существует в вашем проекте». Я застрял!
orad

1
Просто для следующего человека, чтобы сохранить здравомыслие - хотите верьте, хотите - просто выйти из VS было недостаточно, чтобы это закрепилось - мне пришлось перезагрузиться, и затем настройки начали работать. Вы также можете открыть Параметры Visual Studio ... Инструменты SQL Server ... Онлайн-редактирование ... включить "Разрешить ссылки на системные представления и основные объекты базы данных".
NYCdotNet

У меня такая же проблема с Visual Studio 2017, и я не вижу «Ссылку на
базу

3

В нашем проекте у нас уже есть ссылка на master, но у нас была эта проблема. Мы получили ошибку:

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

Чтобы устранить эталонную ошибку, в файле sql таблицы щелкните правой кнопкой мыши свойства и убедитесь, что для параметра BuildSettings установлено значение Build.

Исправлено изменение сборки.


В VS 2019 у меня была эта проблема с проектом базы данных, который изначально был создан в 2017 году. Чтобы исправить это, мне пришлось удалить и повторно добавить ссылку на «master»
Алан Хадселл,

2

то, что сказал Сэм, - лучший способ сделать это.
Однако если у вас есть сценарий, в котором вам нужно развернуть dacpac с машины, у которой нет такой ссылки в этом конкретном месте, у вас могут возникнуть проблемы. Другой способ - открыть файл .project и убедиться, что следующий тег имеет значение falseдля конфигурации сборки, которую вы пытаетесь запустить.

<TreatTSqlWarningsAsErrors>false</TreatTSqlWarningsAsErrors>

Таким образом, вам не нужно добавлять ссылку на свой проект.


13
Это должно быть последним средством, потому что вы теряете отзыв об ошибках sql!
Jowen
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.