Ошибка: неопределенная ссылка на [INFORMATION_SCHEMA].[TABLES]

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если в ходе работы с SQL языком у вас возникла ошибка "неразрешенная ссылка на объект [INFORMATION_SCHEMA].[TABLES]", то рекомендуется удостовериться в правильности выбора контекста базы данных и проверить ваши права доступа. Применяйте следующую конструкцию:

SQL
Скопировать код
USE YourDB; -- Укажите название вашей базы данных
SELECT * FROM INFORMATION_SCHEMA.TABLES; -- Здесь можно просмотреть данные из INFORMATION_SCHEMA.TABLES

Не забывайте заменять YourDB на актуальное название вашей базы данных.

Если проблема остаётся, то добавьте ссылку на системную базу данных master в вашу среду разработки, это особенно полезно при работе с SQL Server Data Tools или аналогичными интегрированными средами разработки (IDE).

Кинга Идем в IT: пошаговый план для смены профессии

Добавление ссылки на системную базу данных Master

В Visual Studio:

  1. Откройте контекстное меню проекта базы данных в Обозревателе решений с помощью правой кнопки мыши.
  2. Перейдите к "Добавить", а затем выберите "Ссылку на базу данных".
  3. Поставьте флажок у "Системная база данных" и выберите из списка "master".
  4. Нажмите "OK" и подождите обновления IntelliSense Visual Studio, которое может занять некоторое время.
Markdown
Скопировать код
// Почему разработчик остался без денег?
// Он утратил весь свой кэш. 😄

Ваши хранимые процедуры, скалярные функции и представления, в которых используется INFORMATION_SCHEMA.TABLES, будут выполняться без ошибок, несмотря на возникающие предупреждения.

Для уменьшения влияния этих предупреждений на проект можно добавить строку <TreatTSqlWarningsAsErrors>false</TreatTSqlWarningsAsErrors> в файл проекта базы данных.

Подробный анализ проблемы и решений

Прямой запрос к системным представлениям

INFORMATION_SCHEMA является стандартным SQL-представлением и очень удобно в использовании, однако иногда бывает полезно применять системные представления, такие как sys.objects, для получения более детализированной информации или увеличения скорости запросов. Пример такого запроса:

SQL
Скопировать код
SELECT * FROM sys.objects WHERE type='U' -- 'U' стоит за пользовательские таблицы

Исправление ошибок настройки сборки

Некорректная конфигурация Настроек сборки проекта часто вызывает ошибки с неразрешенными ссылками. Возможно, потребуется корректировка Целевой платформы (версии SQL Server) и других XML-элементов, связанных с ссылками на базу данных, в файле .sqlproj.

Решение устойчивых проблем

Если проблемы продолжают появляться, то следующие операции могут помочь:

  • Удаление и повторное добавление ссылки на базу данных master.
  • Проработка структуры сценариев развертывания и конвейеров сборки с тем, чтобы они создавали возможность работы с предупреждениями.
  • Рассмотрение возможности изменения целевой платформы для устранения проблем совместимости.

Визуализация

Представьте, что вы собираете пазл (🧩), и вам необходима конкретная деталь — та, на которой написано "TABLES".

Markdown
Скопировать код
| Поле для пазла (БД)     | Искомая часть               |
| ----------------------- | -------------------------- |
| Схемы & Таблицы         | "TABLES" из INFORMATION_SCHEMA 🧩❓ |

Если деталь не подходит, значит, вероятно, она относится к другому пазлу:

Markdown
Скопировать код
Правильная Схема: [🔍, INFORMATION_SCHEMA, TABLES]
Неправильная Схема: [🚫, MISSING_SCHEMA, TABLES]

Появление ошибки с неразрешённой ссылкой связано с ошибкой принадлежности части "TABLES" к набору INFORMATION_SCHEMA!

Markdown
Скопировать код
[INFORMATION_SCHEMA] ➕ [TABLES] ➡️ 🧩✅
[ЛЮБАЯ_ДРУГАЯ_СХЕМА] ➕ [TABLES] ➡️ 🧩🚫

Тем не менее, даже если IntelliSense может выдавать имя представления с предупреждением, это не исключает возможность его использования.

Учет предупреждений в процессе сборки и развертывания

Полная сборка и публикация вопреки предупреждениям

SQL Server позволяет успешно осуществить публикацию проекта базы данных, даже если в ходе сборки возникают предупреждения о неразрешенных ссылках. Но всё же всегда рекомендуется исследовать и преодолевать такие предупреждения для обеспечения контролируемого процесса развертывания.

Конфигурация методик Непрерывной Интеграции

В контексте Непрерывной Интеграции (CI) крайне важно управлять конфигурациями так, чтобы предупреждения о неразрешенных ссылках не прерывали функционирование сборочного конвейера.

Проверка сценариев развертывания

Перед тем, как переходить к окончательному развертыванию, всегда перепроверяйте сгенерированные скрипты. Они должны работать без ошибок, вне зависимости от предупреждений, имеющихся в проекте.

Полезные материалы

  1. Системные представления схемы информации (Transact-SQL) – SQL Server
  2. Новые вопросы с меткой 'information-schema' – Stack Exchange для администраторов баз данных
  3. Карты подъема модели анализа данных службы анализа SQL Server 2014