неразрешенная ссылка на объект [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>

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

Tecfield
источник
13
Это должно быть последним средством, потому что вы теряете отзыв об ошибках sql!
Jowen