Ошибка: неопределенная ссылка на [INFORMATION_SCHEMA].[TABLES]
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Если в ходе работы с SQL языком у вас возникла ошибка "неразрешенная ссылка на объект [INFORMATION_SCHEMA].[TABLES]", то рекомендуется удостовериться в правильности выбора контекста базы данных и проверить ваши права доступа. Применяйте следующую конструкцию:
USE YourDB; -- Укажите название вашей базы данных
SELECT * FROM INFORMATION_SCHEMA.TABLES; -- Здесь можно просмотреть данные из INFORMATION_SCHEMA.TABLES
Не забывайте заменять YourDB
на актуальное название вашей базы данных.
Если проблема остаётся, то добавьте ссылку на системную базу данных master
в вашу среду разработки, это особенно полезно при работе с SQL Server Data Tools или аналогичными интегрированными средами разработки (IDE).
Добавление ссылки на системную базу данных Master
В Visual Studio:
- Откройте контекстное меню проекта базы данных в
Обозревателе решений
с помощью правой кнопки мыши. - Перейдите к "Добавить", а затем выберите "Ссылку на базу данных".
- Поставьте флажок у "Системная база данных" и выберите из списка "master".
- Нажмите "OK" и подождите обновления IntelliSense Visual Studio, которое может занять некоторое время.
// Почему разработчик остался без денег?
// Он утратил весь свой кэш. 😄
Ваши хранимые процедуры, скалярные функции и представления, в которых используется INFORMATION_SCHEMA.TABLES
, будут выполняться без ошибок, несмотря на возникающие предупреждения.
Для уменьшения влияния этих предупреждений на проект можно добавить строку <TreatTSqlWarningsAsErrors>false</TreatTSqlWarningsAsErrors>
в файл проекта базы данных.
Подробный анализ проблемы и решений
Прямой запрос к системным представлениям
INFORMATION_SCHEMA
является стандартным SQL-представлением и очень удобно в использовании, однако иногда бывает полезно применять системные представления, такие как sys.objects, для получения более детализированной информации или увеличения скорости запросов. Пример такого запроса:
SELECT * FROM sys.objects WHERE type='U' -- 'U' стоит за пользовательские таблицы
Исправление ошибок настройки сборки
Некорректная конфигурация Настроек сборки проекта часто вызывает ошибки с неразрешенными ссылками. Возможно, потребуется корректировка Целевой платформы
(версии SQL Server) и других XML-элементов, связанных с ссылками на базу данных, в файле .sqlproj
.
Решение устойчивых проблем
Если проблемы продолжают появляться, то следующие операции могут помочь:
- Удаление и повторное добавление ссылки на базу данных
master
. - Проработка структуры сценариев развертывания и конвейеров сборки с тем, чтобы они создавали возможность работы с предупреждениями.
- Рассмотрение возможности изменения целевой платформы для устранения проблем совместимости.
Визуализация
Представьте, что вы собираете пазл (🧩), и вам необходима конкретная деталь — та, на которой написано "TABLES".
| Поле для пазла (БД) | Искомая часть |
| ----------------------- | -------------------------- |
| Схемы & Таблицы | "TABLES" из INFORMATION_SCHEMA 🧩❓ |
Если деталь не подходит, значит, вероятно, она относится к другому пазлу:
Правильная Схема: [🔍, INFORMATION_SCHEMA, TABLES]
Неправильная Схема: [🚫, MISSING_SCHEMA, TABLES]
Появление ошибки с неразрешённой ссылкой связано с ошибкой принадлежности части "TABLES" к набору INFORMATION_SCHEMA!
[INFORMATION_SCHEMA] ➕ [TABLES] ➡️ 🧩✅
[ЛЮБАЯ_ДРУГАЯ_СХЕМА] ➕ [TABLES] ➡️ 🧩🚫
Тем не менее, даже если IntelliSense может выдавать имя представления с предупреждением, это не исключает возможность его использования.
Учет предупреждений в процессе сборки и развертывания
Полная сборка и публикация вопреки предупреждениям
SQL Server позволяет успешно осуществить публикацию проекта базы данных, даже если в ходе сборки возникают предупреждения о неразрешенных ссылках. Но всё же всегда рекомендуется исследовать и преодолевать такие предупреждения для обеспечения контролируемого процесса развертывания.
Конфигурация методик Непрерывной Интеграции
В контексте Непрерывной Интеграции (CI) крайне важно управлять конфигурациями так, чтобы предупреждения о неразрешенных ссылках не прерывали функционирование сборочного конвейера.
Проверка сценариев развертывания
Перед тем, как переходить к окончательному развертыванию, всегда перепроверяйте сгенерированные скрипты. Они должны работать без ошибок, вне зависимости от предупреждений, имеющихся в проекте.