Ранее мы уже обращались к вопросу получения статистической информации о базе данных. Теперь мы рассмотрим пример получения подобных сведений об объектах базы данных. В данном случае о таблицах. А, конкретно о содержащихся в них полях, их типе и размере.
Стоит отметить, что подобные сведения почти не представляют интереса в плане решения задач прикладной разработки. Но, они весьма полезны в случае необходимости анализа базы данных или её документирования (например, составления спецификации).
Для решения данной задачи нам потребуются две системные таблицы:
- syscolumns – хранит перечень столбцов таблиц базы данных;
- systypes – хранит перечень типов данных
В качестве примера напишем запрос, который будет выводить для некоторой таблицы список полей в следующем формате:
- Порядковый номер столбца в таблице;
- Имя столбца;
- Тип данных;
- Размер столбца;
- Разрешаются ли пустые значения (null);
- Является ли столбец идентификатором.
Ниже приведён код запроса:
1 2 3 4 5 6 7 8 9 10 11 |
SELECT c.colid ColumnID, c.name AS ColumnName, t.name as TypeName c.length AS ColumnLength, c.scale AS ColumnScale, c.IsNullable, SIGN(c.status & 128) AS IsIdentity, FROM syscolumns c INNER JOIN systypes t ON c.xtype = t.xtype and c.usertype = t.usertype WHERE c.id = OBJECT_ID('table_name') ORDER BY c.colid |
Пояснять код не станем, так как столбцы, входящие в этот запрос описаны выше, а смысл остальной его части очевиден.
При помощи данных системных таблиц можно получить ещё целый ряд дополнительных сведений (точность для decimal и т.д.), но мы привели получение только самых основных данных для столбцов.
Существует и альтернативный способ получения информации о столбцах таблицы при помощи хранимой процедуры sp_help, которая принимает в качестве единственного параметра имя таблицы.
1 |
exec sp_help 'table_name'; |
Этот способ проще, но он значительно менее функционален так как процедура sp_help не имеет выходных параметров и, следовательно, выполнить обработку отображаемого ей набора данных невозможно.
Поэтому данный способ подходит в качестве своеобразного отчёта о структуре таблицы для администратора баз данных. Не более.
Мы рассмотрели способы получения информации о столбцах любой таблицы. В будущем вероятно мы ещё продолжим исследовать служебные объекты баз данных Microsoft SQL Server, которые открывают перед администратором баз данных и разработчиком множество дополнительных возможностей.
Добавить комментарий