Запрос к системному каталогу сервера SQL Server

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

  • Количество и названия таблиц и представления в базе данных.

  • Количество столбцов в таблице или представлении, а также имя, тип данных, масштаб и точность каждого столбца.

  • Ограничения, определенные для таблицы.

  • Индексы и ключи, определенные для таблицы.

Системный каталог предоставляет эти сведения для баз данных SQL Server. Ядром системных каталогов SQL Server является набор представлений, которые показывают метаданные, описывающие объекты в экземпляре SQL Server. Метаданные — это данные, описывающие атрибуты объектов в системе. Приложения с поддержкой SQL Server могут обращаться к этим сведениям в системных каталогах с помощью следующих элементов.

  • Представления каталога. Рекомендуется использовать именно этот способ доступа.

  • Представления информационной схемы.

  • Наборы строк схемы OLE DB.

  • Функции работы с каталогами ODBC.

  • Системные хранимые процедуры и функции.

Представления каталога

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

ПримечаниеПримечание

Представления каталога не обеспечивают доступ к метаданным репликации, агента SQL Server и резервного копирования.

Рекомендуется использовать представления каталога для обращения к метаданным по следующим причинам.

  • Все метаданные доступны в качестве представлений каталога.

  • Представления каталога показывают метаданные в формате, который не зависит от реализации конкретной таблицы каталога, вследствие чего на них не влияют изменения в базовых таблицах каталога.

  • Представления каталога являются наиболее эффективным способом доступа к основным метаданным сервера.

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

  • Имена представлений каталога и их столбцов являются описательными. Результаты запросов соответствуют ожидаемым результатам пользователей, не обладающих большими знаниями по функции, которая соответствует запрашиваемым метаданным.

Например, следующий запрос получает из представления каталога sys.objects все объекты базы данных, которые изменились за последние 10 дней.

SELECT name AS object_name 
  ,SCHEMA_NAME(schema_id) AS schema_name
  ,type_desc
  ,create_date
  ,modify_date
FROM sys.objects
WHERE modify_date > GETDATE() - 10
ORDER BY modify_date;

Другие примеры запросов к системному каталогу через представления каталогов см. в разделе Часто задаваемые вопросы о запросах к системному каталогу сервера SQL Server.

Важное примечаниеВажно!

В будущих версиях SQL Server определение любого представления системного каталога может быть расширено путем добавления столбцов в конец списка столбцов. Из-за того, что число возвращаемых столбцов может измениться и нарушить работу приложения, использование синтаксиса SELECT * FROM sys.catalog_view_name в конечном коде не рекомендуется.

Представления информационной схемы

Представления информационной схемы основаны на определениях представлений каталога в стандарте ISO. Они показывают сведения о каталоге в формате, который не зависит от реализации конкретной таблицы каталога, вследствие чего на них не влияют изменения в базовых таблицах каталога. Приложения, которые пользуются этими представлениями, могут переноситься между разнородными системами баз данных, обеспечивающими поддержку стандарта ISO. Дополнительные сведения см. в разделе Представления информационной схемы (Transact-SQL).

ПримечаниеПримечание

Представления информационной схемы не содержат метаданные, относящиеся только к SQL Server 2008.

В следующем примере запрос к представлению INFORMATION_SCHEMA.COLUMNS возвращает все столбцы для таблицы Person в базе данных AdventureWorks2008R2.

SELECT TABLE_NAME, COLUMN_NAME, COLUMNPROPERTY(OBJECT_ID(TABLE_SCHEMA + '.' + TABLE_NAME), COLUMN_NAME, 'ColumnID') AS COLUMN_ID
FROM AdventureWorks2008R2.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Person';

Представления совместимости

Многие системные таблицы, существовавшие в предыдущих версиях SQL Server, в настоящее время реализованы в виде набора представлений. Эти представления известны как представления совместимости, и они не предназначены только для обратной совместимости. Они отображают метаданные, доступные в SQL Server 2000. Однако они не отображают метаданные, относящиеся к новым функциям SQL Server 2005 и более поздних версий. Поэтому при использовании этих функций (например компонент Service Broker или секционирование) следует применять представления каталога. Это достаточное основание для перехода к представлениям каталога. Еще одним основанием для перехода к представлениям каталога является то, что столбцы представлений совместимости, хранящие идентификаторы пользователей и типов, могут возвращать значения NULL или приводить к арифметическому переполнению. Это обусловлено тем, что в версии SQL Server 2005 и выше может быть создано более 32 767 пользователей и типов данных. Например, если создано 32 768 пользователей и выполняется запрос SELECT * FROM sys.sysusers, то при значении ARITHABORT, равном ON, запрос завершается ошибкой арифметического переполнения. Если значение параметра ARITHABORT равно OFF, столбец uid возвращает значение NULL.

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

Наборы строк схемы OLE DB

Спецификация OLE DB задает интерфейс IDBSchemaRowset, раскрывающий совокупность наборов строк схемы, которые содержат сведения о каталогах. Наборы строк схемы OLE DB являются стандартным способом представления сведений о каталогах, поддерживаемых различными поставщиками OLE DB. Наборы строк не зависят от структуры базовых таблиц каталогов. Дополнительные сведения см. в разделе Поддержка набора строк схемы (OLE DB).

Поставщик OLE DB для собственного клиента Microsoft SQL Server поддерживает расширение интерфейса IDBSchemaRowset, возвращающее сведения о каталогах для связанных серверов, используемых в распределенных запросах. Дополнительные сведения см. в разделе Набор строк LINKEDSERVERS (OLE DB).

Функции работы с каталогами ODBC

Спецификация ODBC задает набор функций работы с каталогами, которые возвращают результирующие наборы, содержащие сведения о каталогах. Эти функции являются стандартным способом представления сведений о каталогах, поддерживаемых различными драйверами ODBC. Результирующие наборы не зависят от структуры базовых таблиц каталогов.

ODBC-драйвер для собственного клиента SQL Server поддерживает две специальные функции, которые возвращают сведения о каталогах для связанных серверов, используемых в распределенных запросах. Дополнительные сведения см. в разделе Использование функций каталога.

Системные хранимые процедуры и функции

Компонент Transact-SQL определяет серверные системные хранимые процедуры и хранимые функции, возвращающие сведения о каталогах. Хотя эти хранимые процедуры и функции зависят от SQL Server, они отделяют пользователей от структуры базовых таблиц системных каталогов. Дополнительные сведения см. в разделах Функции метаданных (Transact-SQL) и Системные хранимые процедуры (Transact-SQL).