Как узнать длину поля таблицы sql
Создание игр на Unreal Engine 5
Данный курс научит Вас созданию игр на Unreal Engine 5. Курс состоит из 12 модулей, в которых Вы с нуля освоите этот движок и сможете создавать самые разные игры.
В курсе Вы получите всю необходимую теоретическую часть, а также увидите массу практических примеров. Дополнительно, почти к каждому уроку идут упражнения для закрепления материала.
Помимо самого курса Вас ждёт ещё 8 бесплатных ценных Бонусов: «Chaos Destruction», «Разработка 2D-игры», «Динамическая смена дня и ночи», «Создание динамической погоды», «Создание искусственного интеллекта для NPC», «Создание игры под мобильные устройства», «Создание прототипа RPG с открытым миром» и и весь курс «Создание игр на Unreal Engine 4» (актуальный и в 5-й версии), включающий в себя ещё десятки часов видеоуроков.
Уроки и статьи
Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.
![]()
Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.
![]()
Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.
![]()
Мой аккаунт Моя группа
Какая тема Вас интересует больше?
Узнать размер колонки
Для того, чтобы узнать размер всей бд, или, например, одной таблицы, у нас есть команда ‘sp_spaceused’. Но если пойти дальше, то возникает вопрос: а как получить статистику по полям? Как узнать, в каком поле (колонке) в таблице содержатся самые тяжёлые данные, а в каком самые легкие? Вопрос не столько теоретический, сколько практический: есть огромная база, которую надо проанализировать (постепенно погружаюсь в Data-Mining).
Отслеживать
задан 29 авг 2016 в 23:18
Raman Sinclair Raman Sinclair
229 2 2 серебряных знака 9 9 бронзовых знаков
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Используйте функцию DATALENGTH()
В следующем примере находится длина столбца ProductName в таблице MyOrderTable.
SELECT DATALENGTH(ProductName) as [SizeInBytes] FROM MyOrderTable
Отслеживать
ответ дан 30 авг 2016 в 2:37
4,599 2 2 золотых знака 15 15 серебряных знаков 29 29 бронзовых знаков
Как узнать, в каком поле (колонке) в таблице содержатся самые тяжёлые данные, а в каком самые легкие?
Вас интересует размер в байтах, занимаемый тем или иным столбцом на диске (видимо так, раз вы упомянули sp_spaceused )?
Не уверен, что возможно определить его точно. Точно можно узнать, сколько страниц (блоков по 8Кб, которыми SqlServer хранит данные) занимают данные всей таблицы (или индекса).
Месту на диске, отведенному под хранение конкретного столбца, по-видимому можно дать лишь некоторую оценку (которая, впрочем, не всегда будет адекватной). И с datalength не совсем всё просто. Далее несколько подробнее.
/*1*/ select sum(datalength([Column])) from [Table];
за основу оценки.
Во-первых. Кроме собственно данных столбца всегда есть дополнительная служебная информация, которая может иметь отношение к столбцу, но её объем между столбцами логически может делиться непропорционально их количеству в таблице (например данные заголовка строки). Т.е. оценку размера /*1*/ следует воспринимать как «не менее чем».
Чем меньше в таблице столбцов, и чем короче запись, тем больше издержки на служебные данные, тем, соответственно, дальше оценка /*1*/ от реальности. Так, для таблицы с одним коротким столбцом полный размер данных (с учётом служебной информации) может значительно превосходить «логический» размер данных самого столбца. Сравните, например, для таблицы
create table tiny_nums (value tinyint); insert into tiny_nums (value) select top (1048576) 1 from master.sys.all_columns a cross join master.sys.all_columns b;
результат, возвращаемый запросом /*1*/ с тем, что покажет sp_spaceused .
Во-вторых. Значение, возвращаемое datalength не всегда соответствует действительности. В частности, если datalength([Column]) возвращает NULL , то физически это может быть вовсе не ноль.
Дело в том, что типы столбцов делятся на fixed-length (напр. int , char(20) , datetime2(0) , uniqueidentifier , и т.п.) и variable-length (напр. varbinary(64) , nvarchar(30) и т.п.). И если для variable-length оценка /*1*/ приблизительно справедлива, то для fixed-length столбцов резервируется место для хранения значения, даже если само значение NULL .
Т.е. для fixed-length столбцов оценку /*1*/ следует скорректировать, используя вместо NULL (если они возможны) какое-либо непустое значение, соответствующее типу столбца (например 0 для int ):
/*2*/ select sum(datalength(isnull([IntColumn], 0))) from [Table];
Также нужно учитывать, что для столбцов типа bit возвращаемое datalength значение равно 1. Однако если в таблице (или индексе) несколько bit столбцов, то SqlServer объединяет их по 8 в 1 байт.
Также столбцы могут быть sparse , что означает 0 байт на хранение NULL (даже для fixed-length), но плюс 4 дополнительных байта на хранение значения, если оно не NULL :
/*3*/ select sum(datalength([SparseColumn]) + 4) from [TableName];
В-третьих. Если столбец не просто присутствует в таблице, а ещё и участвует в индексах, то он «утяжеляется» кратно количеству индексов, в которых он участвует. Если столбец является ключевым в кластерном индексе, то нужно прибавить оценку кратную количеству всех некластерных индексов (т.к. в leaf-level страницах некластерных индексов содержатся значения ключей кластерного индекса). Так в таблице
create table SomeTable ( PK_ID bigint primary key, FK_1_ID int, FK_2_ID int, . FK_10_ID int, UID uniqueidentifier ); create index IX_1 on SomeTable (FK_1_ID); . create index IX_10 on SomeTable (FK_10_ID);
самым «тяжёлым» скорее всего окажется вовсе не UID столбец, а PK_ID , т.к. (помимо участия в кластерном первичном ключе) значения PK_ID будут присутствовать ещё в 10-ти некластерных индексах.
Следует учесть также, что если некластерный индекс является фильтрованным индексом, то соответствующую оценку ( /*1*/ , /*2*/ или /*3*/ ) нужно взять не по всей таблице, а по строкам, соответствующим фильтру такого индекса.
В-четвертых (относится к Enterprise edition). Если применяется сжатие строк или страниц таблицы
alter table [TableName] rebuild partition = all with (data_compression = row);
alter index [IX_Name] on [TableName] rebuild with (data_compression = page);
то оценки с помощью datalength перестают быть адекватными и фактор «не менее чем» перестаёт работать.
Сравните для таблиц
create table strings (value char(2000)); insert into strings (value) select top (10000) replicate('a', 2000) from master.sys.all_columns a cross join master.sys.all_columns b;
create table strings_page (value char(2000)) with (data_compression = page); insert into strings_page with (tablock) (value) select top (10000) replicate('a', 2000) from master.sys.all_columns a cross join master.sys.all_columns b;
значения оценки размера столбца с помощью datalength c тем, что покажет sp_spaceused . Для первой таблицы «показания» datalength и sp_spaceused будут близки (т.к. строка таблицы «широкая» и объем служебной информации сказывается мало), а для второй будут расходиться очень сильно.
В-пятых. Всё что было сказано до этого момента справедливо для SqlServer 2008. В более поздних версиях появились COLUMNSTORE индексы, которые, из-за особенностей своего устройства, могут хранить данные в существенно сжатом виде. Для них оценка размера столбца с помощью datalength также может давать неадекватный результат. Если для таблицы
create table strings_col (value char(2000)); insert into strings_col (value) select top (10000) replicate('a', 2000) from master.sys.all_columns a cross join master.sys.all_columns b; create clustered columnstore index ix_clcs on strings_col;
сравнить показания sp_spaceused с datalength , то опять можно наблюдать сильное расхождение.
Полагаю, что данный список факторов, которые следует учитывать при оценке места, занимаемого тем или иным столбцом, не исчерпывающий.
Учебное пособие для студентов по дисциплине «Информатика» Модуль 3
Основными объектами базы данных Microsoft Access являются реляционные таблицы, структура которых определяется набором полей таблицы (столбцы), а информация хранится в виде записей (строки). Поля таблицы базы данных не только определяют структуру таблицы, но также определяют групповые свойства данных, записываемых в ячейки, принадлежащие каждому из полей. Далее перечислены некоторые свойства полей:
- Имя поля – определяет, как следует обращаться к данным этого поля при операциях с базой данных. Однозначно определяет каждое поле в таблице. Одна таблица не может иметь двух полей с одинаковыми именами.
- Тип поля – определяет тип данных, которые могут содержаться в данном поле.
- Размер поля – определяет предельную длину данных, которые могут размещаться в данном поле.
- Формат поля – определяет способ форматирования данных в ячейках таблицы, принадлежащих полю.
- Подпись – определяет заголовок столбца таблицы для данного поля (если подпись не указана, то в качестве заголовка столбца используется свойство Имя поля).
- Значение по умолчанию – то значение, которое вводится в ячейки поля автоматически.
- Условие на значение – ограничение, используемое для проверки правильности ввода данных.
- Обязательное поле – свойство, определяющее обязательность заполнения данного поля при воде данных в таблицу.
Cвойства полей могут различаться в зависимости от типа данных. При работе с Microsoft Access используются следующие типы данных:
- Текстовый – тип данных, используемый для хранения текста ограниченного размера (до 255 символов).
- Поле Мемо – специальный тип данных для хранения больших объемов текста (до 65 535 символов).
- Числовой – тип данных для хранения чисел.
- Дата/время – тип данных для хранения календарных дат и текущего времени.
- Денежный – тип данных для хранения денежных сумм. Для денежных сумм есть некоторые особенности (например, связанные с правилами округления), которые делают более удобным использование специального типа данных.
- Счетчик – специальный тип данных для уникальных (не повторяющихся в поле) увеличивающихся на 1 натуральных чисел, значения которых вводятся в поле автоматически при создании новой записи.
- Логический – используется для хранения логических данных. Такие данные могут принимать только два значения: Истина или Ложь (Да или Нет).
- Поле объекта OLE – специальный тип данных, предназначенный для хранения объектов OLE (графические, аудио- и видеоданные, фрагменты электронных таблиц и др.). Реально такие объекты в таблице не хранятся. Они хранятся в другой части файла базы данных, а в таблице хранятся только указатели на них. Это позволяет существенно ускорить операции с базой данных.
- Гиперссылка – специальное поле для хранения адресов Web-страниц Интернета. При щелчке на ссылке автоматически происходит запуск программы-браузера (например, Internet Explorer) и воспроизведение страницы в его окне.
Создание таблиц начинается с выбора элемента управления Таблицы в окне База данных (рис. 18). Чтобы создать таблицу вручную, следует использовать значок Создание таблицы в режиме конструктора или выбрать пункт Конструктор в управляющем меню окна. Окно Конструктора таблиц представлено на рис. 19.

Рис. 19. Таблица в режиме Конструктор.
В первом столбце вводятся имена полей. Если свойство Подпись для поля не задано, то Имя поля станет одновременно и именем столбца будущей таблицы. Тип для каждого поля выбирают из раскрывающегося списка. Нижняя часть окна содержит список свойств поля, выделенного в верхней части. Некоторые свойства уже заданы по умолчанию, их можно принять или изменить.
При создании таблицы целесообразно задать ключевое поле, являющееся первичным ключом таблицы. Для задания ключевого поля следует щелкнуть на его имени правой кнопкой мыши и выбрать пункт Ключевое поле из контекстного меню или щелкнуть инструмент Ключевое поле на панели инструментов в окне программы (рис. 20).

Рис. 20. Задание ключевого поля таблицы.
Закончив создание структуры таблицы, нужно закрыть бланк. При этом система выдает запрос на сохранение таблицы. После сохранения значок таблицы появляется на вкладке Таблицы в окне База данных (рис. 18).
Ввод данных в таблицу. Заполнение таблицы данными производится с клавиатуры в режиме просмотра данных таблицы (рис. 21). Переход к следующей ячейке можно выполнить клавишей . В нижней части таблицы расположена Панель кнопок перехода. Ее элементами управления удобно пользоваться при перемещении по таблице, имеющей большое число записей. Шириной столбцов можно управлять методом перетаскивания их границ с помощью мыши. Сохранение вводимых в таблицу данных выполняется автоматически в режиме реального времени.

Рис. 21. Таблица в режиме просмотра данных.
Если возникнет необходимость изменить структуру таблицы (состав полей или их свойства), таблицу надо открыть в режиме Конструктор. Для этого ее следует выделить в окне База данных и щелкнуть на кнопке Конструктор (рис. 18).
Создание межтабличных связей

Эта операция выполняется с помощью мыши в специальном окне Схема данных (рис. 22), которое открывается соответствующей кнопкой на панели инструментов или командой Сервис ► Схема данных. Одновременно с окном Схема данных открывается окно Добавление таблицы, в котором можно выбрать нужные таблицы для включения в структуру межтабличных связей. Если окно не открылось, нужно выбрать команду Добавить таблицу из контекстного меню после щелчка правой кнопкой мыши внутри окна Схема данных.

Рис. 22. Диалоговое окно Схема данных.
Связь между таблицами устанавливается перетаскиванием поля одной связываемой таблицы на одноименное поле другой таблицы. Образовавшаяся межтабличная связь отображается в окне Схема данных в виде линии, соединяющей два поля разных таблиц (рис. 23). При этом одна из таблиц считается главной, а другая – связанной. Главная – это та таблица, которая участвует в связи своим ключевым полем (название этого поля на схеме данных отображается жирным шрифтом). Например, в отношении Сотрудники – Командировки главной является таблица Сотрудники.

Рис. 23. Связанные таблицы в окне Схема данных.
При создании связей между таблицами следует позаботиться об обеспечении целостности данных. Примером нарушения целостности данных может служить следующая ситуация. Если в таблице Сотрудники кто-то удалит запись для одного из сотрудников, но не сделает этого в таблице Командировки, то получится, что согласно таблице Командировки некто, имеющий только абстрактный код, ездил в командировки. Узнать по коду, кто этот сотрудник, будет невозможно – произошло нарушение целостности данных.
Установка связи между таблицами позволяет:
- либо исключить возможность удаления или изменения данных в ключевом поле главной таблицы, если с этим полем связаны какие-либо поля других таблиц;
- либо сделать так, что при удалении (или изменении) данных в ключевом поле главной таблицы автоматически произойдет удаление или изменение соответствующих данных в полях связанных таблиц.
Настройка связи выполняется в окне Изменение связей (рис. 24). В нем показаны названия связанных таблиц и имена полей, участвующих в связи, а также приведены элементы управления для обеспечения условий целостности данных. Если установлен только флажок Обеспечение целостности данных, то удалять данные из ключевого поля главной таблицы нельзя. Если вместе с ним включены флажки Каскадное обновление связанных полей и Каскадное удаление связанных записей, то операции редактирования и удаления данных в ключевом поле главной таблицы разрешены, но сопровождаются автоматическими изменениями в связанной таблице.

Рис. 24. Диалоговое окно Изменение связей.
Это окно открывается, если в окне Схема данных выделить линию, соединяющую поля двух таблиц, щелкнуть на ней правой кнопкой мыши и открыть контекстное меню связи (рис. 25), после чего выбрать в нем пункт Изменить связь.

Рис. 25. Контекстное меню связи в окне Схема данных.
Как узнать длину поля таблицы sql
Для создания таблиц применяется команда CREATE TABLE . С этой командой можно использовать ряд операторов, которые определяют столбцы таблицы и их атрибуты. И кроме того, можно использовать ряд операторов, которые определяют свойства таблицы в целом. Одна база данных может содержать до 2 миллиардов таблиц.
Общий синтаксис создания таблицы выглядит следующим образом:
CREATE TABLE название_таблицы (название_столбца1 тип_данных атрибуты_столбца1, название_столбца2 тип_данных атрибуты_столбца2, . название_столбцаN тип_данных атрибуты_столбцаN, атрибуты_таблицы )
После команды CREATE TABLE идет название создаваемой таблицы. Имя таблицы выполняет роль ее идентификатора в базе данных, поэтому оно должно быть уникальным. Имя должно иметь длину не больше 128 символов. Имя может состоять из алфавитно-цифровых символов, а также символов $ и знака подчеркивания. Причем первым символом должна быть буква или знак подчеркивания.
Имя объекта не может включать пробелы и не может представлять одно из ключевых слов языка Transact-SQL. Если идентификатор все же содержит пробельные символы, то его следует заключать в кавычки. Если необходимо в качестве имени использовать ключевые слова, то эти слова помещаются в квадратные скобки.
Примеры корректных идентификаторов:
Users tags$345 users_accounts "users accounts" [Table]
После имени таблицы в скобках указываются параметры всех столбцов и в самом конце атрибуты, которые относятся ко всей таблице. Атрибуты столбцов и атрибуты таблицы являются необязательными компонентами, и их можно не указывать.
В самом просто виде команда CREATE TABLE должна содержать как минимум имя таблицы, имена и типы столбцов.
Таблица может содержать от 1 до 1024 столбцов. Каждый столбец должен иметь уникальное в рамках текущей таблицы имя, и ему должен быть назначен тип данных.
Например, определение простейшей таблицы Customers:
CREATE TABLE Customers ( Id INT, Age INT, FirstName NVARCHAR(20), LastName NVARCHAR(20), Email VARCHAR(30), Phone VARCHAR(20) )
В данном случае в таблице Customers определяются шесть столбцов: Id, FirstName, LastName, Age, Email, Phone. Первые два столбца представляют идентификатор клиента и его возраст и имеют тип INT , то есть будут хранить числовые значения. Следующие два столбца представляют имя и фамилию клиента и имеют тип NVARCHAR(20) , то есть представляют строку UNICODE длиной не более 20 символов. Последние два столбца Email и Phone представляют адрес электронной почты и телефон клиента и имеют тип VARCHAR(30/20) — они также хранят строку, но не в кодировке UNICODE.
Создание таблицы в SQL Management Studio
Создадим простую таблицу на сервере. Для этого откроем SQL Server Management Studio и нажмем правой кнопкой мыши на название сервера. В появившемся контекстном меню выберем пункт New Query .

Таблица создается в рамках текущей базы данных. Если мы запускаем окно редактора SQL как это сделано выше — из под названия сервера, то база данных по умолчанию не установлена. И для ее установки необходимо применить команду USE , после которой указывается имя базы данных. Поэтому введем в поле редактора SQL-команд следующие выражения:
USE usersdb; CREATE TABLE Customers ( Id INT, Age INT, FirstName NVARCHAR(20), LastName NVARCHAR(20), Email VARCHAR(30), Phone VARCHAR(20) );
То есть в базу данных добавляется таблица Customers, которая была рассмотрена ранее.
Также можно открыть редактор из под базы данных, также нажав на нее правой кнопкой мыши и выбрав New Query:

В этом случае в качестве текущей будет рассматриваться та база данных, из под которой был открыт редактор, и дополнительно ее устанавливать с помощью команды USE не потребуется.
Удаление таблиц
Для удаления таблиц используется команда DROP TABLE , которая имеет следующий синтаксис:
DROP TABLE table1 [, table2, . ]
Например, удаление таблицы Customers:
DROP TABLE Customers
Переименование таблицы
Для переименования таблиц применяется системная хранимая процедура «sp_rename». Например, переименование таблицы Users в UserAccounts в базе данных usersdb:
USE usersdb; EXEC sp_rename 'Users', 'UserAccounts';
