Предлагаем вспомнить (а при необходимости и изучить) полезную информацию о Microsoft SQL таблицах, их особенностях и характеристиках. Они создаются с помощью различных инструментов и могут быть представлены в нескольких видах. Рассмотрим подробнее.
Основные характеристики
Таблицы – это логически организованные хранилища данных (объектов), представленные в виде строк и столбцов. Классическим примером может служить таблица, в которой собрана информацию о работниках компании. Так, в ней для каждого отдельного работника выделена строка, а сведения, касающиеся каждого работника представлены в столбцах (ФИО, занимаемая должность, по какому адресу прописка, номера телефонов и т.д.).
Количество таблиц в базе данных (БД) ограничивается лишь числом объектов, которые доступны в ней (2 147 483 647). Наибольшее количество столбцов в стандартной таблице, определяемой пользователем – 1024. Общий размер таблицы (SIZE TABLE), как и количество строк, ограничивается лишь объемом пространства, требуемого для хранения информации на сервере.
Чтобы управлять данными и характеристики таблицы, для нее и каждого столбца в отдельности, определяются свойства. Также реализована возможность:
- присвоения ограничений ключу, обеспечивающему уникальность;
- установки связей между различными таблицами.
Чтобы на странице отображалось максимальное количество строк, данные могу сжиматься по строкам либо страницам.
С таблицами можно выполнять различные операции: изменять, добавлять, удалять, получать данные.
Типы
В SQL Server предусмотрено разбиение таблиц на типы. Каждый тип предназначен для достижения определенных целей в БД. Кроме стандартных, существуют такие типы таблиц:
Секционированные
Такими таблицами называю те, в которых информация поделена секциями (блоками) горизонтально. Блоки могут распределяться между разными группами файлов в БД. Разбиение на секции облегчает управление индексами и таблицами огромных размеров.
Разделение на секции позволяет мгновенно иметь доступ к наборам данных, а также управлять ими максимально эффективно, соблюдая целостность общей коллекции. В SQL Server по умолчанию поддерживается до 15000 секций.
Временные
Такие таблицы сохраняются в базе данных tempdb, по умолчанию содержащуюся в MS SQL Server и также называют темпоральными. Они полезны для хранения табличных данных как части сложного комплексного скрипта. Срок существования – сессия БД. Потому временные таблицы удобно использовать для промежуточных, временных данных.
При создании временной таблицы с помощью CREATE TABLE в SSMS (QUERY Editor), ее срок существования будет ограничен тем временем, пока открыт данный редактор запросов. Потому, к темпоральной таблице можно обращаться из разных скриптов внутри редактора SSMS.
В том случае, когда нужно удалить таблицу еще до окончания сессии, используется команда DROP TABLE.
У всех темпоральных таблиц – первый символ #. Они делятся на два вида:
- локальные – доступные лишь текущему соединению пользователя. В начале таблицы находится символ (#). После отключения пользователем от экземпляра SQL Server сразу удаляются;
- глобальные – доступные всем пользователям. Начинаются с двойного символа (##).Будут удалены после того, как отключатся от SQL Server все пользователи, ссылавшиеся на них.
SQL Server 2019 (15.x) на всех уровнях совместимости структур БД с помощью временных таблиц уменьшает количество повторных компиляций.
SQL Server дополнительно производит простые проверки во избежание неоправданных перекомпиляций:
- на совпадение модуля внешней области, использованного для формирования временной таблицы при компиляции, с тем, который будет использоваться для следующих операций;
- проводит отслеживание каждого изменения языка DDL определения данных, полученные при первичной компиляции, а также сравнение их с операциями DDL при следующих запусках.
В итоге уменьшается количество ненужных перекомпиляций, а также понижается нагрузка на ЦП.
Производные
В отличие от предыдущих, производные таблицы более эффективны в плане производительности. Их также можно создавать в MS SQL Server задав ключевым словом WITH.
Отличаются от предыдущих еще и тем, что хранятся в оперативной памяти. Они будут существовать лишь во время первого выполнения запросов (QUERIES), представляющих данную таблицу.
Системные
Системным называют специальный набор таблиц, в котором SQL Server сохраняет информацию, определяющую конфигурацию сервера вместе со всеми его таблицами. Всем пользователям не доступно выполнение прямого запроса либо обновления таких таблиц.
Информация из системных таблиц может быть доступной лишь через представления системы.
Широкие
В таких таблицах применяются разреженные списки. Это дает возможность расширить в них общее количество столбцов и статистик до 30000, а индексов – до 1000.
Разреженные столбцы делают возможным уменьшение пространства, в котором хранится значение NULL. Но возрастает стоимость принятия значений, не равных NULL. Они определяют набор столбцов, представляющий нетипичное XML-представление, где все разреженные столбцы консолидированы в структурированную выходную информацию.
В широких таблицах размеры строк – до 8019 байт. Не меняется максимально допустимое количество неразряженных и вычисляемых столбцов (равно 1024).
Они оказывают влияние на эффективность:
- Повышаются расходы на обслуживание табличных индексов. Потому специалисты советуют сократить в ней количество индексов, оставив лишь необходимые. С ростом индексов соответственно растут требования не только к памяти, но и времени компиляции DML. Должны быть отфильтрованы, применимы к подмножествам данных некластеризованные индексы.
- Динамическое добавление или удаление столбцов возможно через приложение. Скомпилированные планы запросов становятся также недействительными. При разработке приложений должна учитываться предполагаемая рабочая нагрузка. Это позволит минимизировать риск изменений в схеме.
- На производительность оказывает влияние как удаление, так и добавление информации. Это также нужно учитывать при разработке приложений, стараясь свести к минимуму изменения в данных.
- В широких таблицах необходимо ограничить реализацию инструкций DML, которые обновляют строки ключа кластеризации. Причина – может понадобиться большой объем ресурсов для выполнения и компиляции вышеуказанной инструкции.
- Для выполнения операций по переключению секций может понадобиться большой объем памяти, а значит, и продолжительный промежуток времени на выполнение.
- Для оптимизации работы курсоров обновления (отвечающих за обновление нужных строк) требуется явное перечисление этих столбцов в FOR UPDATE.
Сводные таблицы относятся к базовым видам аналитики. Их можно создать с помощью SQL (вопреки мнению большинства). И хоть это не так быстро, как в MS Excel, решения в SQL достаточно просты.
1. Оператор CASE и его аналоги
Наиболее очевидный, а значит и простой метод создания сводных таблиц – это hardcode с применением оператора CASE. Его можно заменить какой-либо функцией из vendor-specific, но оно того не стоит.
К примеру, заменой может стать оператор FILTER (доступный в SQLite и PostgreSQL). Но у него определенная специфика. Несмотря на то, что он принадлежит стандарту (SQL: 2003), но по факту получает поддержку только в вышеперечисленных SQLite и PostgreSQL.
Иные СУБД также обладают аналогами CASE, которые не предусмотрены стандартами:
- SQL Server 2012+ – IIF;
- в MySQL – IF;
- в Oracle – DECODE.
Чаще всего использование аналогов не оправдано, т.к. преимуществ они не дают, а поддержку кода в будущем значительно усложняют.
2. PIVOT (SQL Server)
Использование оператора CASE вместе с аналогами, описанное выше, не очень впечатляет. Гораздо удобнее использовать разворот таблицы (PIVOT TABLE) в SQL Server. Несмотря на то, что данный оператор не предусмотрен стандартами SQL, СУБД предлагает аналогичный синтаксис.
3. CTE
Оператор PIVOT не единственный, который может «повернуть». С помощью стандартного синтаксиса запрос можно переписать. Для этого следует воспользоваться комбинацией CTE (Common Table Expression) и возможными соединениями.
4. Функция CROSSTAB
В PostgreSQL существует функция, приблизительно идентичная PIVOT в Microsoft SQL — CROSSTAB. Для начала работы понадобится tablefunc.
Особенности использования CROSSTAB:
- основным аргументом воспринимает запрос в виде text sql. Он идентичен тому, что и для PIVOT, но с обязательной сортировкой;
- от PIVOT отличается тем, что для разворота таблицы понадобится прописывать не только наименования столбцов, но и типы данных;
- заполнение строк происходит слева направо, пропуская значения NULL. Т.е. строки, в которых будут значения NULL, «съедут» влево. В результате, корректными будут лишь те строки, в которых были заполнены все значения. Значит, если они были отличны от NULL, то запрос был корректным и вернет нужный результат. Чтобы избежать подобного поведения функции CROSSTAB необходимо применять вариант с двумя аргументами. Второй из них должен включать запрос, который будет в итоге выводить перечень столбцов.
5. Динамический SQL
Запросы, включающие PIVOT или CROSSTAB более функциональны, чем те, которые содержали CASE (либо CTE), однако некоторые значения все еще приходится заносить руками. Когда их огромное количество либо список регулярно обновляется, то идеально выбирать значения автоматически из словаря (если он имеется) либо select distinct supplier from test supply.
Для этого понадобится динамический SQL. Чтобы получить такую строку в SQL Server можно воспользоваться STUFF, а затем добавить ее в окончательный запрос. Однако для любого использования динамического SQL понадобится углубиться в специфику конкретной СУБД вместе с соответствующим ей процедурным решением SQL.
Как создать таблицу с Transact-SQL (Table)
Transact-SQL – это набор данных специального назначения, предназначенный для хранения конечного набора. Чаще всего применяется для хранения набора строк в течение короткого временного отрезка, которые возвращаются в качестве конечного набора функций с соответствующим значением из таблицы.
Функциям и их переменным может соответствовать тип table.
CREATE TABLE
Данная инструкция генерирует новую MS SQL таблицу, в которой присутствуют все нужные столбцы необходимого типа данных. Из одной БД может быть создано ограниченное число таблиц. В ней не может быть свыше 2 млрд. объектов (TABLES, ограничений, триггеров, представлений, хранимых процедур).
В CREATE TABLE используется синтаксис:
- table_name – имя базовой таблицы;
- col_name1 и т.д. – наименования столбцов;
- type1 и т.д. – типы данных.
Наименование объекта БД формируется из важных составляющих:
[server_name.[db_name.[schema_name.]]]object_name
В формуле использованы следующие обозначения:
- server_name – наименование сервера, к которому относится объект БД;
- db_name – наименование БД, к которой относится таблица;
- schema_name – название схемы, к которой относится таблица;
- object_name – наименование таблицы.
Если в столбце не разрешены значения NULL (NOT NULL), то наличие такого значения становится невозможным. При любой попытке вставки в столбец значения NULL, система будет возвращать сообщения о наличии ошибки.
Генерация таблицы всегда происходит в схеме БД. Ее генерация пользователем возможна лишь в той схеме, на которую юзер получил разрешения для реализации инструкции ALTER. Юзеры с ролями sysadmin, db_ddladmin, db_owner могут работать над созданием таблиц в любой схеме.
Используются аргументы table_type_definition и collation_definition.
Используемые предложения
В инструкциях CREATE TABLE или ALTER TABLE используются предложения:
- UNIQUE – определение потенциального ключа (столбец или их группы, имеющие уникальные значения, которые можно применять как первичный ключ);
- PRIMARY KEY – определение первичного ключа (столбца либо их группы, имеющих различные значения в строках);
- CHECK – постановка ограничений для проверок, которые определяют условия для данных, подставляемых в столбец;
- FOREIGN KEY – определение внешнего ключа (столбец либо их группа, которые содержат значения, равные со значением первичного ключа в той либо иной таблицах).
Опции ON DELETE и ON UPDATE используются при удалении или модификации первичного ключа.
Как вывести информацию о полях
Информация о полях, их размере и типах окажется очень полезной, когда понадобится анализ структуры базы данных или необходимости ее документирования. Для ее составления понадобятся две системные таблицы:
- syscolumns – сохраняет список столбцов таблиц базы данных;
- systypes – сохраняет список типов данных.
Также данные о табличных столбцах, включая поля, можно получить, обратившись к хранимой процедуре sp_help. Это гораздо простой способ, но обладает меньшей функциональностью. Это связано с тем, что у процедуры sp_help нет выходных параметров. А потому, произвести обработку набора данных, отображаемого ею, невозможно.
Следовательно, описанный способ сможет подойти администратору баз данных лишь в качестве специфического отчета о структуре таблицы, но не больше.
Изучайте или вспоминайте материал, применяйте на практике. При возникновении вопросов – обязательно задавайте их.
Также приглашаем на специальный курс по MS SQL в Otus.
<!DOCTYPE html>
<html dir="ltr" lang="ru-RU">
<head>
<meta charset="UTF-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="profile" href="http://gmpg.org/xfn/11" />
<title>Особенности MS SQL таблиц OTUS</title>
<!-- All in One SEO 4.5.2.1 - aioseo.com -->
<meta name="description" content="Предлагаем вспомнить (а при необходимости и изучить) полезную информацию о Microsoft SQL таблицах, их особенностях и характеристиках. Они создаются с помощью различных инструментов и могут быть представлены в нескольких видах. Рассмотрим подробнее. Основные характеристики Таблицы – это логически организованные хранилища данных (объектов), представленные в виде строк и столбцов. Классическим примером может служить таблица, в которой" />
<meta name="robots" content="max-image-preview:large" />
<link rel="canonical" href="https://otus.ru/journal/osobennosti-ms-sql-tablic/" />
<meta name="generator" content="All in One SEO (AIOSEO) 4.5.2.1" />
<script type="application/ld+json" class="aioseo-schema">
{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/otus.ru\/journal\/osobennosti-ms-sql-tablic\/#article","name":"\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 MS SQL \u0442\u0430\u0431\u043b\u0438\u0446 OTUS","headline":"\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 MS SQL \u0442\u0430\u0431\u043b\u0438\u0446","author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2021\/07\/oj-1080x720-5.png","width":1080,"height":720},"datePublished":"2021-07-22T16:11:50+00:00","dateModified":"2021-07-22T16:11:51+00:00","inLanguage":"ru-RU","mainEntityOfPage":{"@id":"https:\/\/otus.ru\/journal\/osobennosti-ms-sql-tablic\/#webpage"},"isPartOf":{"@id":"https:\/\/otus.ru\/journal\/osobennosti-ms-sql-tablic\/#webpage"},"articleSection":"\u041f\u043e\u043b\u0435\u0437\u043d\u043e\u0435, MS SQL, SQL, \u0411\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445"},{"@type":"BreadcrumbList","@id":"https:\/\/otus.ru\/journal\/osobennosti-ms-sql-tablic\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/#listItem","position":1,"name":"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430","item":"https:\/\/otus.ru\/journal\/","nextItem":"https:\/\/otus.ru\/journal\/osobennosti-ms-sql-tablic\/#listItem"},{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/osobennosti-ms-sql-tablic\/#listItem","position":2,"name":"\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 MS SQL \u0442\u0430\u0431\u043b\u0438\u0446","previousItem":"https:\/\/otus.ru\/journal\/#listItem"}]},{"@type":"Organization","@id":"https:\/\/otus.ru\/journal\/#organization","name":"\u041e\u0442\u0443\u0441 \u043e\u043d\u043b\u0430\u0439\u043d-\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435","url":"https:\/\/otus.ru\/journal\/","sameAs":["https:\/\/www.youtube.com\/channel\/UCetgtvy93o3i3CvyGXKFU3g"],"contactPoint":{"@type":"ContactPoint","telephone":"+74999389202","contactType":"Customer Support"}},{"@type":"Person","@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author","url":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/","name":"A. Pavlenko","image":{"@type":"ImageObject","@id":"https:\/\/otus.ru\/journal\/osobennosti-ms-sql-tablic\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/d4c499a104d7c2522fa41f89e6819499?s=96&d=mm&r=g","width":96,"height":96,"caption":"A. Pavlenko"}},{"@type":"WebPage","@id":"https:\/\/otus.ru\/journal\/osobennosti-ms-sql-tablic\/#webpage","url":"https:\/\/otus.ru\/journal\/osobennosti-ms-sql-tablic\/","name":"\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 MS SQL \u0442\u0430\u0431\u043b\u0438\u0446 OTUS","description":"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c (\u0430 \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0438 \u0438\u0437\u0443\u0447\u0438\u0442\u044c) \u043f\u043e\u043b\u0435\u0437\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e Microsoft SQL \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445, \u0438\u0445 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445 \u0438 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0430\u0445. \u041e\u043d\u0438 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0432\u0438\u0434\u0430\u0445. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u0422\u0430\u0431\u043b\u0438\u0446\u044b \u2013 \u044d\u0442\u043e \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 (\u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432), \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0432 \u0432\u0438\u0434\u0435 \u0441\u0442\u0440\u043e\u043a \u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432. \u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u0443\u0436\u0438\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439","inLanguage":"ru-RU","isPartOf":{"@id":"https:\/\/otus.ru\/journal\/#website"},"breadcrumb":{"@id":"https:\/\/otus.ru\/journal\/osobennosti-ms-sql-tablic\/#breadcrumblist"},"author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"creator":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2021\/07\/oj-1080x720-5.png","@id":"https:\/\/otus.ru\/journal\/osobennosti-ms-sql-tablic\/#mainImage","width":1080,"height":720},"primaryImageOfPage":{"@id":"https:\/\/otus.ru\/journal\/osobennosti-ms-sql-tablic\/#mainImage"},"datePublished":"2021-07-22T16:11:50+00:00","dateModified":"2021-07-22T16:11:51+00:00"},{"@type":"WebSite","@id":"https:\/\/otus.ru\/journal\/#website","url":"https:\/\/otus.ru\/journal\/","name":"OTUS JOURNAL","description":"Blog about IT","inLanguage":"ru-RU","publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"}}]}
</script>
<!-- All in One SEO -->
<link rel='dns-prefetch' href='//otus.ru' />
<link rel='dns-prefetch' href='//fonts.googleapis.com' />
<link rel='stylesheet' id='wp-block-library-css' href='https://otus.ru/journal/wp-includes/css/dist/block-library/style.min.css?ver=6.4.7' type='text/css' media='all' />
<style id='classic-theme-styles-inline-css' type='text/css'>
/*! This file is auto-generated */
.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
</style>
<style id='global-styles-inline-css' type='text/css'>
body{--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}body .is-layout-flex > *{margin: 0;}body .is-layout-grid{display: grid;}body .is-layout-grid > *{margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
.wp-block-navigation a:where(:not(.wp-element-button)){color: inherit;}
:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
.wp-block-pullquote{font-size: 1.5em;line-height: 1.6;}
</style>
<link rel='stylesheet' id='wbcr-comments-plus-url-span-css' href='https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/css/url-span.css?ver=2.2.0' type='text/css' media='all' />
<link rel='stylesheet' id='wpel-style-css' href='https://otus.ru/journal/wp-content/plugins/wp-external-links/public/css/wpel.css?ver=2.59' type='text/css' media='all' />
<link rel='stylesheet' id='ez-toc-css' href='https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/css/screen.min.css?ver=2.0.61' type='text/css' media='all' />
<style id='ez-toc-inline-css' type='text/css'>
div#ez-toc-container .ez-toc-title {font-size: 120%;}div#ez-toc-container .ez-toc-title {font-weight: 500;}div#ez-toc-container ul li {font-size: 95%;}div#ez-toc-container nav ul ul li {font-size: 90%;}
.ez-toc-container-direction {direction: ltr;}.ez-toc-counter ul{counter-reset: item ;}.ez-toc-counter nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }.ez-toc-widget-direction {direction: ltr;}.ez-toc-widget-container ul{counter-reset: item ;}.ez-toc-widget-container nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }
</style>
<link rel='stylesheet' id='contentberg-fonts-css' href='https://fonts.googleapis.com/css?family=Roboto%3A400%2C500%2C700%7CPT+Serif%3A400%2C400i%2C600%7CIBM+Plex+Serif%3A500' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-core-css' href='https://otus.ru/journal/wp-content/themes/contentberg/style.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-lightbox-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/lightbox.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='font-awesome-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/fontawesome/css/font-awesome.min.css?ver=1.8.3' type='text/css' media='all' />
<script type="text/javascript" id="breeze-prefetch-js-extra">
/* <![CDATA[ */
var breeze_prefetch = {"local_url":"https:\/\/otus.ru\/journal","ignore_remote_prefetch":"1","ignore_list":["\/wp-admin\/"]};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/breeze/assets/js/js-front-end/breeze-prefetch-links.min.js" id="breeze-prefetch-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.min.js" id="jquery-core-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery-migrate.min.js" id="jquery-migrate-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/lazysizes.js" id="lazysizes-js"></script>
<link rel="https://api.w.org/" href="https://otus.ru/journal/wp-json/" /><link rel="alternate" type="application/json" href="https://otus.ru/journal/wp-json/wp/v2/posts/1602" /><link rel='shortlink' href='https://otus.ru/journal/?p=1602' />
<link rel="alternate" type="application/json+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fosobennosti-ms-sql-tablic%2F" />
<link rel="alternate" type="text/xml+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fosobennosti-ms-sql-tablic%2F&format=xml" />
<script>var Sphere_Plugin = {"ajaxurl":"https:\/\/otus.ru\/journal\/wp-admin\/admin-ajax.php"};</script><link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-32x32.png" sizes="32x32" />
<link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-192x192.png" sizes="192x192" />
<link rel="apple-touch-icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-180x180.png" />
<meta name="msapplication-TileImage" content="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-270x270.png" />
<style type="text/css" id="wp-custom-css">
#menu-item-10406 .wpel-icon {
display: none;
}
#menu-item-10407 .wpel-icon {
display: none;
}
.otus-login-site a .wpel-icon {
display: none;
}
.menu-menju-navykov-container a .wpel-icon {
display: none;
}
.otus-login-site a
{
background: #ffd709;
border-radius: 12px;
color: #0f0f10;
font-size: 14px;
font-weight: 700;
line-height: 20px;
display: block;
text-align: center;
padding: 8px 25px;
}
.main-footer.dark {
background: linear-gradient(90deg, #a64fc5, #4f54e6);
border-color: transparent;
}
.main-footer.bold .copyright {
color: #fff;
}
.main-footer.bold .to-top i {
color: #fff;
}
.main-footer.bold .back-to-top {
color: #fff;
}
.nav__scroll {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
.scrollable-menu .menu {
display: flex;
}
.nav__scroll
{
background: linear-gradient(90deg, #a64fc5, #4f54e6);
}
.scrollable-menu .menu .menu-item {
flex: 0 0 auto;
padding: 15px 15px;
}
.scrollable-menu .menu .menu-item a {
color: #fff;
}
.nav__scroll::-webkit-scrollbar{background-color:#fff;height:5px;}
.nav__scroll::-webkit-scrollbar-thumb{background-color:#dcdcdc;}
.nav__scroll::-webkit-scrollbar-track{-webkit-border-radius:0;border-radius:0;background-color:#fff;}/
body {
min-width: 320px;
}
.banner-click img {
margin: 0 auto;
display: block;
}
.banner-click {
cursor: pointer;
}
.banner-footer-area {
margin-bottom: 20px;
}
.banner-left-area {
margin-top: 40px;
} </style>
<!--Start VDZ Yandex Metrika Plugin-->
<!-- Yandex.Metrika counter --><script type="text/javascript" >(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");ym(34531570, "init", {clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true, trackHash:true, ecommerce:"dataLayer"});</script>
<noscript><div><img src="https://mc.yandex.ru/watch/34531570" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter --><!--START ADD EVENTS FROM CF7--><script type='text/javascript'>document.addEventListener( 'wpcf7submit', function( event ) {
//event.detail.contactFormId;
if(ym){
//console.log(event.detail);
ym(34531570, 'reachGoal', 'VDZ_SEND_CONTACT_FORM_7');
ym(34531570, 'params', {
page_url: window.location.href,
status: event.detail.status,
locale: event.detail.contactFormLocale,
form_id: event.detail.contactFormId,
});
}
}, false );
</script><!--END ADD EVENTS FROM CF7-->
<!--End VDZ Yandex Metrika Plugin-->
</head>
<body class="post-template-default single single-post postid-1602 single-format-standard right-sidebar lazy-normal has-lb">
<div class="main-wrap">
<header id="main-head" class="main-head head-nav-below has-search-modal simple simple-boxed">
<div class="inner inner-head" data-sticky-bar="0">
<div class="wrap cf wrap-head">
<div class="left-contain">
<span class="mobile-nav"><i class="fa fa-bars"></i></span>
<div class="title">
<a href="https://otus.ru/journal/" title="OTUS JOURNAL" rel="home" data-wpel-link="internal">
<span class="text-logo"><img src="/journal/wp-content/themes/contentberg/img/logo_site.svg" alt="OTUS JOURNAL"></span>
</a>
</div>
</div>
<div class="navigation-wrap inline">
<nav class="navigation inline simple light" data-sticky-bar="0">
<div class="menu-rubriki-container"><ul id="menu-rubriki" class="menu"><li id="menu-item-109" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-1 menu-item-109"><a href="https://otus.ru/journal/category/pro-it/" data-wpel-link="internal"><span>Про IT</span></a></li>
<li id="menu-item-113" class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-cat-4 menu-item-113"><a href="https://otus.ru/journal/category/polza/" data-wpel-link="internal"><span>Полезное</span></a></li>
<li id="menu-item-114" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-3 menu-item-114"><a href="https://otus.ru/journal/category/lifestyle/" data-wpel-link="internal"><span>Лайфстайл</span></a></li>
<li id="menu-item-10406" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10406"><a href="https://otus.ru/catalog/courses" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Обучение</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10407" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10407"><a href="https://otus.ru/about" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Информация</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </nav>
</div>
<div class="actions">
<div class="otus-login-site">
<a href="https://otus.ru/login/" target="_blank" data-wpel-link="external" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Войти<span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
<a href="#" title="Search" class="search-link"><i class="fa fa-search"></i></a>
</div>
</div>
</div>
</header> <!-- .main-head -->
<div class="nav nav_disable nav_colored nav_transparent course-categories__nav nav__scroll ">
<div class="container wrap">
<div class="links inline simple light scrollable-menu">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov" class="menu"><li id="menu-item-10413" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10414" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10415" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10416" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10417" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10418" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10419" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10420" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10421" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
</div>
</div>
<div class="main wrap">
<div class="ts-row cf">
<div class="col-8 main-content cf">
<article id="post-1602" class="the-post post-1602 post type-post status-publish format-standard has-post-thumbnail category-polza tag-ms-sql tag-sql tag-bazy-dannyh">
<header class="post-header the-post-header cf">
<div class="post-meta the-post-meta">
<span class="post-cat">
<a href="https://otus.ru/journal/category/polza/" class="category" data-wpel-link="internal">Полезное</a>
</span>
<h1 class="post-title">
Особенности MS SQL таблиц
</h1>
<a href="https://otus.ru/journal/osobennosti-ms-sql-tablic/" class="date-link" data-wpel-link="internal"><time class="post-date">22 июля, 2021</time></a>
</div>
<div class="featured">
<a href="https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-5.png" class="image-link" data-wpel-link="internal"><img width="770" height="515" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20770%20515%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-contentberg-main size-contentberg-main lazyload wp-post-image" alt="Особенности MS SQL таблиц" title="Особенности MS SQL таблиц" decoding="async" fetchpriority="high" data-srcset="https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-5-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-5-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-5-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-5-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-5-270x180.png 270w" data-src="https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-5-770x515.png" data-sizes="(max-width: 770px) 100vw, 770px" /> </a>
</div>
</header><!-- .post-header -->
<div class="post-content description cf entry-content content-normal">
<div id="ez-toc-container" class="ez-toc-v2_0_61 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction">
<div class="ez-toc-title-container">
<p class="ez-toc-title " >Содержание</p>
<span class="ez-toc-title-toggle"><a href="#" class="ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle" aria-label="Toggle Table of Content"><span class="ez-toc-js-icon-con"><span class=""><span class="eztoc-hide" style="display:none;">Toggle</span><span class="ez-toc-icon-toggle-span"><svg style="fill: #999;color:#999" xmlns="http://www.w3.org/2000/svg" class="list-377408" width="20px" height="20px" viewBox="0 0 24 24" fill="none"><path d="M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z" fill="currentColor"></path></svg><svg style="fill: #999;color:#999" class="arrow-unsorted-368013" xmlns="http://www.w3.org/2000/svg" width="10px" height="10px" viewBox="0 0 24 24" version="1.2" baseProfile="tiny"><path d="M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z"/></svg></span></span></span></a></span></div>
<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-1" href="#%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5_%D1%85%D0%B0%D1%80%D0%B0%D0%BA%D1%82%D0%B5%D1%80%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B8" title="Основные характеристики">Основные характеристики</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-2" href="#%D0%A2%D0%B8%D0%BF%D1%8B" title="Типы">Типы</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-3" href="#%D0%A1%D0%B5%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5" title="Секционированные">Секционированные</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-4" href="#%D0%92%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5" title="Временные">Временные</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-5" href="#%D0%9F%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%BD%D1%8B%D0%B5" title="Производные">Производные</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-6" href="#%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%BD%D1%8B%D0%B5" title="Системные">Системные</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-7" href="#%D0%A8%D0%B8%D1%80%D0%BE%D0%BA%D0%B8%D0%B5" title="Широкие">Широкие</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-8" href="#%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D0%B2%D0%BE%D0%B4%D0%BD%D1%8B%D1%85_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_SQL" title="Создание сводных таблиц с помощью SQL">Создание сводных таблиц с помощью SQL</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-9" href="#1_%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80_CASE_%D0%B8_%D0%B5%D0%B3%D0%BE_%D0%B0%D0%BD%D0%B0%D0%BB%D0%BE%D0%B3%D0%B8" title="1. Оператор CASE и его аналоги">1. Оператор CASE и его аналоги</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-10" href="#2_PIVOT_SQL_Server" title="2. PIVOT (SQL Server)">2. PIVOT (SQL Server)</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-11" href="#3_CTE" title="3. CTE">3. CTE</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-12" href="#4_%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F_CROSSTAB" title="4. Функция CROSSTAB">4. Функция CROSSTAB</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-13" href="#5_%D0%94%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_SQL" title="5. Динамический SQL">5. Динамический SQL</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-14" href="#%D0%9A%D0%B0%D0%BA_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D1%82%D1%8C_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%83_%D1%81_Transact-SQL_Table" title="Как создать таблицу с Transact-SQL (Table)">Как создать таблицу с Transact-SQL (Table)</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-15" href="#CREATE_TABLE" title="CREATE TABLE">CREATE TABLE</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-16" href="#%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B5%D0%BC%D1%8B%D0%B5_%D0%BF%D1%80%D0%B5%D0%B4%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F" title="Используемые предложения">Используемые предложения</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-17" href="#%D0%9A%D0%B0%D0%BA_%D0%B2%D1%8B%D0%B2%D0%B5%D1%81%D1%82%D0%B8_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D1%8E_%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85" title="Как вывести информацию о полях">Как вывести информацию о полях</a></li></ul></nav></div>
<p>Предлагаем вспомнить (а при необходимости и изучить) полезную информацию о Microsoft SQL таблицах, их особенностях и характеристиках. Они создаются с помощью различных инструментов и могут быть представлены в нескольких видах. Рассмотрим подробнее.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5_%D1%85%D0%B0%D1%80%D0%B0%D0%BA%D1%82%D0%B5%D1%80%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B8"></span>Основные характеристики<span class="ez-toc-section-end"></span></h2>
<p>Таблицы – это логически организованные хранилища данных (объектов), представленные в виде строк и столбцов. Классическим примером может служить таблица, в которой собрана информацию о работниках компании. Так, в ней для каждого отдельного работника выделена строка, а сведения, касающиеся каждого работника представлены в столбцах (ФИО, занимаемая должность, по какому адресу прописка, номера телефонов и т.д.).</p>
<p>Количество таблиц в базе данных (БД) ограничивается лишь числом объектов, которые доступны в ней (2 147 483 647). Наибольшее количество столбцов в стандартной таблице, определяемой пользователем – 1024. Общий размер таблицы (SIZE TABLE), как и количество строк, ограничивается лишь объемом пространства, требуемого для хранения информации на сервере.</p>
<p>Чтобы управлять данными и характеристики таблицы, для нее и каждого столбца в отдельности, определяются свойства. Также реализована возможность:</p>
<ul><li>присвоения ограничений ключу, обеспечивающему уникальность;</li><li>установки связей между различными таблицами.</li></ul>
<p>Чтобы на странице отображалось максимальное количество строк, данные могу сжиматься по строкам либо страницам.</p>
<p>С таблицами можно выполнять различные операции: изменять, добавлять, удалять, получать данные.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A2%D0%B8%D0%BF%D1%8B"></span>Типы<span class="ez-toc-section-end"></span></h2>
<p>В SQL Server предусмотрено разбиение таблиц на типы. Каждый тип предназначен для достижения определенных целей в БД. Кроме стандартных, существуют такие типы таблиц:</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D0%B5%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5"></span>Секционированные<span class="ez-toc-section-end"></span></h3>
<p>Такими таблицами называю те, в которых информация поделена секциями (блоками) горизонтально. Блоки могут распределяться между разными группами файлов в БД. Разбиение на секции облегчает управление индексами и таблицами огромных размеров.</p>
<p>Разделение на секции позволяет мгновенно иметь доступ к наборам данных, а также управлять ими максимально эффективно, соблюдая целостность общей коллекции. В SQL Server по умолчанию поддерживается до 15000 секций.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%92%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5"></span>Временные<span class="ez-toc-section-end"></span></h3>
<p>Такие таблицы сохраняются в базе данных tempdb, по умолчанию содержащуюся в MS SQL Server и также называют темпоральными. Они полезны для хранения табличных данных как части сложного комплексного скрипта. Срок существования – сессия БД. Потому временные таблицы удобно использовать для промежуточных, временных данных.</p>
<p>При создании временной таблицы с помощью CREATE TABLE в SSMS (QUERY Editor), ее срок существования будет ограничен тем временем, пока открыт данный редактор запросов. Потому, к темпоральной таблице можно обращаться из разных скриптов внутри редактора SSMS.</p>
<p>В том случае, когда нужно удалить таблицу еще до окончания сессии, используется команда DROP TABLE.</p>
<p>У всех темпоральных таблиц – первый символ #. Они делятся на два вида:</p>
<ul><li>локальные – доступные лишь текущему соединению пользователя. В начале таблицы находится символ (#). После отключения пользователем от экземпляра SQL Server сразу удаляются;</li><li>глобальные – доступные всем пользователям. Начинаются с двойного символа (##).Будут удалены после того, как отключатся от SQL Server все пользователи, ссылавшиеся на них.</li></ul>
<p>SQL Server 2019 (15.x) на всех уровнях совместимости структур БД с помощью временных таблиц уменьшает количество повторных компиляций.</p>
<p>SQL Server дополнительно производит простые проверки во избежание неоправданных перекомпиляций:</p>
<ul><li>на совпадение модуля внешней области, использованного для формирования временной таблицы при компиляции, с тем, который будет использоваться для следующих операций;</li><li>проводит отслеживание каждого изменения языка DDL определения данных, полученные при первичной компиляции, а также сравнение их с операциями DDL при следующих запусках.</li></ul>
<p>В итоге уменьшается количество ненужных перекомпиляций, а также понижается нагрузка на ЦП.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%BD%D1%8B%D0%B5"></span>Производные<span class="ez-toc-section-end"></span></h3>
<p>В отличие от предыдущих, производные таблицы более эффективны в плане производительности. Их также можно создавать в MS SQL Server задав ключевым словом WITH.</p>
<p>Отличаются от предыдущих еще и тем, что хранятся в оперативной памяти. Они будут существовать лишь во время первого выполнения запросов (QUERIES), представляющих данную таблицу.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%BD%D1%8B%D0%B5"></span>Системные<span class="ez-toc-section-end"></span></h3>
<p>Системным называют специальный набор таблиц, в котором SQL Server сохраняет информацию, определяющую конфигурацию сервера вместе со всеми его таблицами. Всем пользователям не доступно выполнение прямого запроса либо обновления таких таблиц.</p>
<p>Информация из системных таблиц может быть доступной лишь через представления системы.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A8%D0%B8%D1%80%D0%BE%D0%BA%D0%B8%D0%B5"></span>Широкие<span class="ez-toc-section-end"></span></h3>
<p>В таких таблицах применяются разреженные списки. Это дает возможность расширить в них общее количество столбцов и статистик до 30000, а индексов – до 1000.</p>
<p>Разреженные столбцы делают возможным уменьшение пространства, в котором хранится значение NULL. Но возрастает стоимость принятия значений, не равных NULL. Они определяют набор столбцов, представляющий нетипичное XML-представление, где все разреженные столбцы консолидированы в структурированную выходную информацию.</p>
<p>В широких таблицах размеры строк – до 8019 байт. Не меняется максимально допустимое количество неразряженных и вычисляемых столбцов (равно 1024).</p>
<p>Они оказывают влияние на эффективность:</p>
<ol type="1"><li>Повышаются расходы на обслуживание табличных индексов. Потому специалисты советуют сократить в ней количество индексов, оставив лишь необходимые. С ростом индексов соответственно растут требования не только к памяти, но и времени компиляции DML. Должны быть отфильтрованы, применимы к подмножествам данных некластеризованные индексы.</li><li>Динамическое добавление или удаление столбцов возможно через приложение. Скомпилированные планы запросов становятся также недействительными. При разработке приложений должна учитываться предполагаемая рабочая нагрузка. Это позволит минимизировать риск изменений в схеме.</li><li>На производительность оказывает влияние как удаление, так и добавление информации. Это также нужно учитывать при разработке приложений, стараясь свести к минимуму изменения в данных.</li><li>В широких таблицах необходимо ограничить реализацию инструкций DML, которые обновляют строки ключа кластеризации. Причина – может понадобиться большой объем ресурсов для выполнения и компиляции вышеуказанной инструкции.</li><li>Для выполнения операций по переключению секций может понадобиться большой объем памяти, а значит, и продолжительный промежуток времени на выполнение.</li><li>Для оптимизации работы курсоров обновления (отвечающих за обновление нужных строк) требуется явное перечисление этих столбцов в FOR UPDATE.</li></ol>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D0%B2%D0%BE%D0%B4%D0%BD%D1%8B%D1%85_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_SQL"></span>Создание сводных таблиц с помощью SQL<span class="ez-toc-section-end"></span></h2>
<p>Сводные таблицы относятся к базовым видам аналитики. Их можно создать с помощью SQL (вопреки мнению большинства). И хоть это не так быстро, как в MS Excel, решения в SQL достаточно просты.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="1_%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80_CASE_%D0%B8_%D0%B5%D0%B3%D0%BE_%D0%B0%D0%BD%D0%B0%D0%BB%D0%BE%D0%B3%D0%B8"></span>1. Оператор CASE и его аналоги<span class="ez-toc-section-end"></span></h3>
<p>Наиболее очевидный, а значит и простой метод создания сводных таблиц – это hardcode с применением оператора CASE. Его можно заменить какой-либо функцией из vendor-specific, но оно того не стоит.</p>
<p>К примеру, заменой может стать оператор FILTER (доступный в SQLite и PostgreSQL). Но у него определенная специфика. Несмотря на то, что он принадлежит стандарту (SQL: 2003), но по факту получает поддержку только в вышеперечисленных SQLite и PostgreSQL.</p>
<p>Иные СУБД также обладают аналогами CASE, которые не предусмотрены стандартами:</p>
<ul><li>SQL Server 2012+ – IIF;</li><li>в MySQL – IF;</li><li>в Oracle – DECODE.</li></ul>
<p>Чаще всего использование аналогов не оправдано, т.к. преимуществ они не дают, а поддержку кода в будущем значительно усложняют.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="2_PIVOT_SQL_Server"></span>2. PIVOT (SQL Server)<span class="ez-toc-section-end"></span></h3>
<p>Использование оператора CASE вместе с аналогами, описанное выше, не очень впечатляет. Гораздо удобнее использовать разворот таблицы (PIVOT TABLE) в SQL Server. Несмотря на то, что данный оператор не предусмотрен стандартами SQL, СУБД предлагает аналогичный синтаксис.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="3_CTE"></span>3. CTE<span class="ez-toc-section-end"></span></h3>
<p>Оператор PIVOT не единственный, который может «повернуть». С помощью стандартного синтаксиса запрос можно переписать. Для этого следует воспользоваться комбинацией CTE (Common Table Expression) и возможными соединениями.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="4_%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F_CROSSTAB"></span>4. Функция CROSSTAB<span class="ez-toc-section-end"></span></h3>
<p>В PostgreSQL существует функция, приблизительно идентичная PIVOT в Microsoft SQL — CROSSTAB. Для начала работы понадобится tablefunc.</p>
<p>Особенности использования CROSSTAB:</p>
<ul><li>основным аргументом воспринимает запрос в виде text sql. Он идентичен тому, что и для PIVOT, но с обязательной сортировкой;</li><li>от PIVOT отличается тем, что для разворота таблицы понадобится прописывать не только наименования столбцов, но и типы данных;</li><li>заполнение строк происходит слева направо, пропуская значения NULL. Т.е. строки, в которых будут значения NULL, «съедут» влево. В результате, корректными будут лишь те строки, в которых были заполнены все значения. Значит, если они были отличны от NULL, то запрос был корректным и вернет нужный результат. Чтобы избежать подобного поведения функции CROSSTAB необходимо применять вариант с двумя аргументами. Второй из них должен включать запрос, который будет в итоге выводить перечень столбцов.</li></ul>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="5_%D0%94%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_SQL"></span>5. Динамический SQL<span class="ez-toc-section-end"></span></h3>
<p>Запросы, включающие PIVOT или CROSSTAB более функциональны, чем те, которые содержали CASE (либо CTE), однако некоторые значения все еще приходится заносить руками. Когда их огромное количество либо список регулярно обновляется, то идеально выбирать значения автоматически из словаря (если он имеется) либо select distinct supplier from test supply.</p>
<p>Для этого понадобится динамический SQL. Чтобы получить такую строку в SQL Server можно воспользоваться STUFF, а затем добавить ее в окончательный запрос. Однако для любого использования динамического SQL понадобится углубиться в специфику конкретной СУБД вместе с соответствующим ей процедурным решением SQL.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9A%D0%B0%D0%BA_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D1%82%D1%8C_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%83_%D1%81_Transact-SQL_Table"></span>Как создать таблицу с Transact-SQL (Table)<span class="ez-toc-section-end"></span></h2>
<p>Transact-SQL – это набор данных специального назначения, предназначенный для хранения конечного набора. Чаще всего применяется для хранения набора строк в течение короткого временного отрезка, которые возвращаются в качестве конечного набора функций с соответствующим значением из таблицы.</p>
<p>Функциям и их переменным может соответствовать тип table.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="CREATE_TABLE"></span>CREATE TABLE<span class="ez-toc-section-end"></span></h3>
<p>Данная инструкция генерирует новую MS SQL таблицу, в которой присутствуют все нужные столбцы необходимого типа данных. Из одной БД может быть создано ограниченное число таблиц. В ней не может быть свыше 2 млрд. объектов (TABLES, ограничений, триггеров, представлений, хранимых процедур).</p>
<p>В CREATE TABLE используется синтаксис:</p>
<ul><li>table_name – имя базовой таблицы;</li><li>col_name1 и т.д. – наименования столбцов;</li><li>type1 и т.д. – типы данных.</li></ul>
<p>Наименование объекта БД формируется из важных составляющих:</p>
<p>[server_name.[db_name.[schema_name.]]]object_name</p>
<p>В формуле использованы следующие обозначения:</p>
<ul><li>server_name – наименование сервера, к которому относится объект БД;</li><li>db_name – наименование БД, к которой относится таблица;</li><li>schema_name – название схемы, к которой относится таблица;</li><li>object_name – наименование таблицы.</li></ul>
<p>Если в столбце не разрешены значения NULL (NOT NULL), то наличие такого значения становится невозможным. При любой попытке вставки в столбец значения NULL, система будет возвращать сообщения о наличии ошибки.</p>
<p>Генерация таблицы всегда происходит в схеме БД. Ее генерация пользователем возможна лишь в той схеме, на которую юзер получил разрешения для реализации инструкции ALTER. Юзеры с ролями sysadmin, db_ddladmin, db_owner могут работать над созданием таблиц в любой схеме.</p>
<p>Используются аргументы table_type_definition и collation_definition.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B5%D0%BC%D1%8B%D0%B5_%D0%BF%D1%80%D0%B5%D0%B4%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F"></span>Используемые предложения<span class="ez-toc-section-end"></span></h3>
<p>В инструкциях CREATE TABLE или ALTER TABLE используются предложения:</p>
<ul><li>UNIQUE – определение потенциального ключа (столбец или их группы, имеющие уникальные значения, которые можно применять как первичный ключ);</li><li>PRIMARY KEY – определение первичного ключа (столбца либо их группы, имеющих различные значения в строках);</li><li>CHECK – постановка ограничений для проверок, которые определяют условия для данных, подставляемых в столбец;</li><li>FOREIGN KEY – определение внешнего ключа (столбец либо их группа, которые содержат значения, равные со значением первичного ключа в той либо иной таблицах).</li></ul>
<p>Опции ON DELETE и ON UPDATE используются при удалении или модификации первичного ключа.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9A%D0%B0%D0%BA_%D0%B2%D1%8B%D0%B2%D0%B5%D1%81%D1%82%D0%B8_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D1%8E_%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85"></span>Как вывести информацию о полях<span class="ez-toc-section-end"></span></h2>
<p>Информация о полях, их размере и типах окажется очень полезной, когда понадобится анализ структуры базы данных или необходимости ее документирования. Для ее составления понадобятся две системные таблицы:</p>
<ul><li>syscolumns – сохраняет список столбцов таблиц базы данных;</li><li>systypes – сохраняет список типов данных.</li></ul>
<p>Также данные о табличных столбцах, включая поля, можно получить, обратившись к хранимой процедуре sp_help. Это гораздо простой способ, но обладает меньшей функциональностью. Это связано с тем, что у процедуры sp_help нет выходных параметров. А потому, произвести обработку набора данных, отображаемого ею, невозможно.</p>
<p>Следовательно, описанный способ сможет подойти администратору баз данных лишь в качестве специфического отчета о структуре таблицы, но не больше.</p>
<p>Изучайте или вспоминайте материал, применяйте на практике. При возникновении вопросов – обязательно задавайте их.</p>
<figure class="wp-block-image size-large"><a href="https://otus.ru/lessons/subd/?utm_source=oj&utm_medium=affilate&utm_campaign=subd" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer"><img decoding="async" width="970" height="90" src="https://otus.ru/journal/wp-content/uploads/2021/07/SUBD_970x90-20219-543a9a.png" alt="Особенности MS SQL таблиц" class="wp-image-1608" srcset="https://otus.ru/journal/wp-content/uploads/2021/07/SUBD_970x90-20219-543a9a.png 970w, https://otus.ru/journal/wp-content/uploads/2021/07/SUBD_970x90-20219-543a9a-300x28.png 300w, https://otus.ru/journal/wp-content/uploads/2021/07/SUBD_970x90-20219-543a9a-150x14.png 150w, https://otus.ru/journal/wp-content/uploads/2021/07/SUBD_970x90-20219-543a9a-768x71.png 768w" sizes="(max-width: 970px) 100vw, 970px" /></a></figure>
<p>Также приглашаем на <a href="https://otus.ru/lessons/ms-sql-server-razrabotchik/?utm_source=oj&utm_medium=affilate&utm_campaign=sql" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">специальный курс по MS SQL в Otus<span class="wpel-icon wpel-image wpel-icon-6"></span></a>.</p>
</div><!-- .post-content -->
<div class="the-post-foot cf">
<div class="tag-share cf">
<div class="post-tags"><a href="https://otus.ru/journal/tag/ms-sql/" rel="tag" data-wpel-link="internal">MS SQL</a><a href="https://otus.ru/journal/tag/sql/" rel="tag" data-wpel-link="internal">SQL</a><a href="https://otus.ru/journal/tag/bazy-dannyh/" rel="tag" data-wpel-link="internal">Базы данных</a></div>
<div class="post-share">
<div class="post-share-icons cf">
<span class="counters">
</span>
<a href="https://www.facebook.com/sharer.php?u=https%3A%2F%2Fotus.ru%2Fjournal%2Fosobennosti-ms-sql-tablic%2F" class="link facebook wpel-icon-right" target="_blank" title="Share on Facebook" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-facebook"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fosobennosti-ms-sql-tablic%2F&text=%D0%9E%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8%20MS%20SQL%20%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86" class="link twitter wpel-icon-right" target="_blank" title="Share on Twitter" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-twitter"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fotus.ru%2Fjournal%2Fosobennosti-ms-sql-tablic%2F" class="link linkedin wpel-icon-right" target="_blank" title="LinkedIn" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-linkedin"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://pinterest.com/pin/create/button/?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fosobennosti-ms-sql-tablic%2F&media=https%3A%2F%2Fotus.ru%2Fjournal%2Fwp-content%2Fuploads%2F2021%2F07%2Foj-1080x720-5.png&description=%D0%9E%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8%20MS%20SQL%20%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86" class="link pinterest wpel-icon-right" target="_blank" title="Pinterest" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-pinterest-p"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
</div>
</div>
</div>
<div class="post-nav">
<div class="post previous cf">
<a href="https://otus.ru/journal/meropriyatiya-novoj-nedeli/" title="Prev Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-left"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/meropriyatiya-novoj-nedeli/" class="image-link" rel="previous" data-wpel-link="internal">
<img width="150" height="100" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20100%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="Новые мероприятия в OTUS" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2021/06/oj-1080x720-13-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2021/06/oj-1080x720-13-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2021/06/oj-1080x720-13-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2021/06/oj-1080x720-13-768x512.png 768w, https://otus.ru/journal/wp-content/uploads/2021/06/oj-1080x720-13-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2021/06/oj-1080x720-13-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2021/06/oj-1080x720-13-370x245.png 370w, https://otus.ru/journal/wp-content/uploads/2021/06/oj-1080x720-13.png 1080w" data-src="https://otus.ru/journal/wp-content/uploads/2021/06/oj-1080x720-13-150x100.png" data-sizes="(max-width: 150px) 100vw, 150px" title="Новые мероприятия в OTUS" /> </a>
<div class="post-meta">
<span class="label">Prev Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/meropriyatiya-novoj-nedeli/" data-wpel-link="internal">Мероприятия новой недели</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/meropriyatiya-novoj-nedeli/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2021-07-18T18:14:21+00:00">18 июля, 2021</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">5 Mins Read</span>
</div>
</div> </div>
</span>
</div>
<div class="post next cf">
<a href="https://otus.ru/journal/osobennosti-raboty-s-ms-sql-data/" title="Next Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-right"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/osobennosti-raboty-s-ms-sql-data/" class="image-link" rel="next" data-wpel-link="internal">
<img width="150" height="100" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20100%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="Особенности работы с MS SQL дата" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-1-1-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-1-1-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-1-1-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-1-1-768x512.png 768w, https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-1-1-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-1-1-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-1-1-370x245.png 370w, https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-1-1.png 1080w" data-src="https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-1-1-150x100.png" data-sizes="(max-width: 150px) 100vw, 150px" title="Особенности работы с MS SQL дата" /> </a>
<div class="post-meta">
<span class="label">Next Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/osobennosti-raboty-s-ms-sql-data/" data-wpel-link="internal">Особенности работы с MS SQL дата</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/osobennosti-raboty-s-ms-sql-data/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2021-07-22T16:38:56+00:00">22 июля, 2021</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">10 Mins Read</span>
</div>
</div> </div>
</span>
</div>
</div>
<section class="related-posts grid-3">
<h4 class="section-head"><span class="title">Читать ещё</span></h4>
<div class="ts-row posts cf">
<article class="post col-4">
<a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" title="Уровень готовности CTO к 2026" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Уровень готовности CTO к 2026" title="Уровень готовности CTO к 2026" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" class="post-link" data-wpel-link="internal">Уровень готовности CTO к 2026</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-16T19:50:59+00:00">16 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" title="Новые уроки ноября: только топ-темы по программированию" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Новые уроки ноября: только топ-темы по программированию" title="Новые уроки ноября: только топ-темы по программированию" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" class="post-link" data-wpel-link="internal">Новые уроки ноября: только топ-темы по программированию</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-09T23:24:11+00:00">9 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/schjot-idjot-na-chasy/" title="Счёт идёт на часы" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Счёт идёт на часы" title="Счёт идёт на часы" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-370x245.png 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/schjot-idjot-na-chasy/" class="post-link" data-wpel-link="internal">Счёт идёт на часы</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-10-30T15:04:59+00:00">30 октября, 2025</time>
</div>
</div>
</article >
</div>
</section>
</article> <!-- .the-post -->
</div>
<aside class="col-4 sidebar">
<div class="inner">
<ul>
<li id="search-2" class="widget widget_search"><h5 class="widget-title"><span>Поиск по блогу</span></h5>
<form method="get" class="search-form" action="https://otus.ru/journal/">
<label>
<span class="screen-reader-text">Search for:</span>
<input type="search" class="search-field" placeholder="Введите запрос и нажмите Enter" value="" name="s" title="Search for:" />
</label>
<button type="submit" class="search-submit"><i class="fa fa-search"></i></button>
</form>
</li>
<li id="tag_cloud-5" class="widget widget_tag_cloud"><h5 class="widget-title"><span>Метки</span></h5><div class="tagcloud"><a href="https://otus.ru/journal/tag/android-2/" class="tag-cloud-link tag-link-74 tag-link-position-1" style="font-size: 12.472222222222pt;" aria-label="Android (34 элемента)" data-wpel-link="internal">Android</a>
<a href="https://otus.ru/journal/tag/c-3/" class="tag-cloud-link tag-link-91 tag-link-position-2" style="font-size: 10.916666666667pt;" aria-label="C (23 элемента)" data-wpel-link="internal">C</a>
<a href="https://otus.ru/journal/tag/c-2/" class="tag-cloud-link tag-link-81 tag-link-position-3" style="font-size: 12.666666666667pt;" aria-label="C# (35 элементов)" data-wpel-link="internal">C#</a>
<a href="https://otus.ru/journal/tag/c/" class="tag-cloud-link tag-link-20 tag-link-position-4" style="font-size: 12.472222222222pt;" aria-label="c++ (34 элемента)" data-wpel-link="internal">c++</a>
<a href="https://otus.ru/journal/tag/computer-science/" class="tag-cloud-link tag-link-209 tag-link-position-5" style="font-size: 15.972222222222pt;" aria-label="computer science (78 элементов)" data-wpel-link="internal">computer science</a>
<a href="https://otus.ru/journal/tag/css/" class="tag-cloud-link tag-link-288 tag-link-position-6" style="font-size: 8.6805555555556pt;" aria-label="CSS (13 элементов)" data-wpel-link="internal">CSS</a>
<a href="https://otus.ru/journal/tag/data-science/" class="tag-cloud-link tag-link-151 tag-link-position-7" style="font-size: 8pt;" aria-label="Data Science (11 элементов)" data-wpel-link="internal">Data Science</a>
<a href="https://otus.ru/journal/tag/devops/" class="tag-cloud-link tag-link-98 tag-link-position-8" style="font-size: 10.138888888889pt;" aria-label="devops (19 элементов)" data-wpel-link="internal">devops</a>
<a href="https://otus.ru/journal/tag/docker/" class="tag-cloud-link tag-link-143 tag-link-position-9" style="font-size: 8.2916666666667pt;" aria-label="Docker (12 элементов)" data-wpel-link="internal">Docker</a>
<a href="https://otus.ru/journal/tag/gamedev/" class="tag-cloud-link tag-link-25 tag-link-position-10" style="font-size: 11.694444444444pt;" aria-label="gamedev (28 элементов)" data-wpel-link="internal">gamedev</a>
<a href="https://otus.ru/journal/tag/hr/" class="tag-cloud-link tag-link-103 tag-link-position-11" style="font-size: 8pt;" aria-label="hr (11 элементов)" data-wpel-link="internal">hr</a>
<a href="https://otus.ru/journal/tag/html/" class="tag-cloud-link tag-link-217 tag-link-position-12" style="font-size: 11.208333333333pt;" aria-label="HTML (25 элементов)" data-wpel-link="internal">HTML</a>
<a href="https://otus.ru/journal/tag/ios/" class="tag-cloud-link tag-link-101 tag-link-position-13" style="font-size: 8.9722222222222pt;" aria-label="iOS (14 элементов)" data-wpel-link="internal">iOS</a>
<a href="https://otus.ru/journal/tag/it/" class="tag-cloud-link tag-link-50 tag-link-position-14" style="font-size: 10.527777777778pt;" aria-label="IT (21 элемент)" data-wpel-link="internal">IT</a>
<a href="https://otus.ru/journal/tag/java/" class="tag-cloud-link tag-link-75 tag-link-position-15" style="font-size: 15.680555555556pt;" aria-label="Java (73 элемента)" data-wpel-link="internal">Java</a>
<a href="https://otus.ru/journal/tag/javascript/" class="tag-cloud-link tag-link-83 tag-link-position-16" style="font-size: 14.319444444444pt;" aria-label="JavaScript (53 элемента)" data-wpel-link="internal">JavaScript</a>
<a href="https://otus.ru/journal/tag/linux/" class="tag-cloud-link tag-link-141 tag-link-position-17" style="font-size: 11.888888888889pt;" aria-label="Linux (29 элементов)" data-wpel-link="internal">Linux</a>
<a href="https://otus.ru/journal/tag/machine-learning/" class="tag-cloud-link tag-link-167 tag-link-position-18" style="font-size: 8.6805555555556pt;" aria-label="Machine Learning (13 элементов)" data-wpel-link="internal">Machine Learning</a>
<a href="https://otus.ru/journal/tag/otus-book/" class="tag-cloud-link tag-link-261 tag-link-position-19" style="font-size: 9.9444444444444pt;" aria-label="otus book (18 элементов)" data-wpel-link="internal">otus book</a>
<a href="https://otus.ru/journal/tag/php/" class="tag-cloud-link tag-link-45 tag-link-position-20" style="font-size: 10.527777777778pt;" aria-label="PHP (21 элемент)" data-wpel-link="internal">PHP</a>
<a href="https://otus.ru/journal/tag/python/" class="tag-cloud-link tag-link-27 tag-link-position-21" style="font-size: 16.944444444444pt;" aria-label="Python (99 элементов)" data-wpel-link="internal">Python</a>
<a href="https://otus.ru/journal/tag/qa/" class="tag-cloud-link tag-link-155 tag-link-position-22" style="font-size: 11.402777777778pt;" aria-label="qa (26 элементов)" data-wpel-link="internal">qa</a>
<a href="https://otus.ru/journal/tag/sql/" class="tag-cloud-link tag-link-38 tag-link-position-23" style="font-size: 12.861111111111pt;" aria-label="SQL (37 элементов)" data-wpel-link="internal">SQL</a>
<a href="https://otus.ru/journal/tag/team-lead/" class="tag-cloud-link tag-link-364 tag-link-position-24" style="font-size: 9.9444444444444pt;" aria-label="team lead (18 элементов)" data-wpel-link="internal">team lead</a>
<a href="https://otus.ru/journal/tag/unity/" class="tag-cloud-link tag-link-24 tag-link-position-25" style="font-size: 8pt;" aria-label="unity (11 элементов)" data-wpel-link="internal">unity</a>
<a href="https://otus.ru/journal/tag/algoritmy/" class="tag-cloud-link tag-link-30 tag-link-position-26" style="font-size: 9.9444444444444pt;" aria-label="Алгоритмы (18 элементов)" data-wpel-link="internal">Алгоритмы</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh/" class="tag-cloud-link tag-link-40 tag-link-position-27" style="font-size: 10.138888888889pt;" aria-label="Базы данных (19 элементов)" data-wpel-link="internal">Базы данных</a>
<a href="https://otus.ru/journal/tag/matematika/" class="tag-cloud-link tag-link-44 tag-link-position-28" style="font-size: 10.916666666667pt;" aria-label="Математика (23 элемента)" data-wpel-link="internal">Математика</a>
<a href="https://otus.ru/journal/tag/arhitektura-po/" class="tag-cloud-link tag-link-10 tag-link-position-29" style="font-size: 9.4583333333333pt;" aria-label="архитектура ПО (16 элементов)" data-wpel-link="internal">архитектура ПО</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh-2/" class="tag-cloud-link tag-link-251 tag-link-position-30" style="font-size: 10.138888888889pt;" aria-label="базы данных (19 элементов)" data-wpel-link="internal">базы данных</a>
<a href="https://otus.ru/journal/tag/vebinar/" class="tag-cloud-link tag-link-201 tag-link-position-31" style="font-size: 13.930555555556pt;" aria-label="вебинар (48 элементов)" data-wpel-link="internal">вебинар</a>
<a href="https://otus.ru/journal/tag/dajdzhest/" class="tag-cloud-link tag-link-308 tag-link-position-32" style="font-size: 10.722222222222pt;" aria-label="дайджест (22 элемента)" data-wpel-link="internal">дайджест</a>
<a href="https://otus.ru/journal/tag/zapis-vebinara/" class="tag-cloud-link tag-link-226 tag-link-position-33" style="font-size: 14.902777777778pt;" aria-label="запись вебинара (61 элемент)" data-wpel-link="internal">запись вебинара</a>
<a href="https://otus.ru/journal/tag/zapis-uroka/" class="tag-cloud-link tag-link-272 tag-link-position-34" style="font-size: 16.069444444444pt;" aria-label="запись урока (80 элементов)" data-wpel-link="internal">запись урока</a>
<a href="https://otus.ru/journal/tag/informacionnaya-bezopasnost/" class="tag-cloud-link tag-link-232 tag-link-position-35" style="font-size: 10.138888888889pt;" aria-label="информационная безопасность (19 элементов)" data-wpel-link="internal">информационная безопасность</a>
<a href="https://otus.ru/journal/tag/karera-v-it/" class="tag-cloud-link tag-link-292 tag-link-position-36" style="font-size: 9.9444444444444pt;" aria-label="карьера в IT (18 элементов)" data-wpel-link="internal">карьера в IT</a>
<a href="https://otus.ru/journal/tag/podborka/" class="tag-cloud-link tag-link-7 tag-link-position-37" style="font-size: 12.666666666667pt;" aria-label="подборка (35 элементов)" data-wpel-link="internal">подборка</a>
<a href="https://otus.ru/journal/tag/podborka-statej/" class="tag-cloud-link tag-link-219 tag-link-position-38" style="font-size: 15.777777777778pt;" aria-label="подборка статей (75 элементов)" data-wpel-link="internal">подборка статей</a>
<a href="https://otus.ru/journal/tag/programmirovanie/" class="tag-cloud-link tag-link-65 tag-link-position-39" style="font-size: 22pt;" aria-label="программирование (332 элемента)" data-wpel-link="internal">программирование</a>
<a href="https://otus.ru/journal/tag/proekt/" class="tag-cloud-link tag-link-321 tag-link-position-40" style="font-size: 11.888888888889pt;" aria-label="проект (29 элементов)" data-wpel-link="internal">проект</a>
<a href="https://otus.ru/journal/tag/proektnaya-rabota/" class="tag-cloud-link tag-link-310 tag-link-position-41" style="font-size: 11.597222222222pt;" aria-label="проектная работа (27 элементов)" data-wpel-link="internal">проектная работа</a>
<a href="https://otus.ru/journal/tag/seti/" class="tag-cloud-link tag-link-181 tag-link-position-42" style="font-size: 12.958333333333pt;" aria-label="сети (38 элементов)" data-wpel-link="internal">сети</a>
<a href="https://otus.ru/journal/tag/testirovanie/" class="tag-cloud-link tag-link-69 tag-link-position-43" style="font-size: 13.930555555556pt;" aria-label="тестирование (48 элементов)" data-wpel-link="internal">тестирование</a>
<a href="https://otus.ru/journal/tag/upravlenie-komandoj/" class="tag-cloud-link tag-link-63 tag-link-position-44" style="font-size: 11.694444444444pt;" aria-label="управление командой (28 элементов)" data-wpel-link="internal">управление командой</a>
<a href="https://otus.ru/journal/tag/habr-2/" class="tag-cloud-link tag-link-203 tag-link-position-45" style="font-size: 13.930555555556pt;" aria-label="хабр (48 элементов)" data-wpel-link="internal">хабр</a></div>
</li>
</ul>
</div>
</aside>
</div> <!-- .ts-row -->
</div> <!-- .main -->
<footer class="main-footer dark bold">
<section class="lower-footer cf">
<div class="wrap">
<div class="links">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov-1" class="menu"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
<p class="copyright"> © 2015-2026 OTUS </p>
<div class="to-top">
<a href="#" class="back-to-top"><i class="fa fa-angle-up"></i> Top</a>
</div>
</div>
</section>
</footer>
</div> <!-- .main-wrap -->
<div class="mobile-menu-container off-canvas" id="mobile-menu">
<a href="#" class="close"><i class="fa fa-times"></i></a>
<div class="logo">
</div>
<ul class="mobile-menu"></ul>
</div>
<div class="search-modal-wrap">
<div class="search-modal-box" role="dialog" aria-modal="true">
<form method="get" class="search-form" action="https://otus.ru/journal/">
<input type="search" class="search-field" name="s" placeholder="Search..." value="" required />
<button type="submit" class="search-submit visuallyhidden">Submit</button>
<p class="message">
Type above and press <em>Enter</em> to search. Press <em>Esc</em> to cancel. </p>
</form>
</div>
</div>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/js/url-span.js" id="wbcr-comments-plus-url-span-js"></script>
<script type="text/javascript" id="ez-toc-scroll-scriptjs-js-extra">
/* <![CDATA[ */
var eztoc_smooth_local = {"scroll_offset":"30"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/smooth_scroll.min.js" id="ez-toc-scroll-scriptjs-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/js-cookie/js.cookie.min.js" id="ez-toc-js-cookie-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/sticky-kit/jquery.sticky-kit.min.js" id="ez-toc-jquery-sticky-kit-js"></script>
<script type="text/javascript" id="ez-toc-js-js-extra">
/* <![CDATA[ */
var ezTOC = {"smooth_scroll":"1","visibility_hide_by_default":"","scroll_offset":"30","fallbackIcon":"<span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span>"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/front.min.js" id="ez-toc-js-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/custom-script.js" id="custom-script-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/magnific-popup.js" id="magnific-popup-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.fitvids.js" id="jquery-fitvids-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/imagesloaded.min.js" id="imagesloaded-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/object-fit-images.js" id="object-fit-images-js"></script>
<script type="text/javascript" id="contentberg-theme-js-extra">
/* <![CDATA[ */
var Bunyad = {"custom_ajax_url":"\/journal\/osobennosti-ms-sql-tablic\/"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theme.js" id="contentberg-theme-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theia-sticky-sidebar.js" id="theia-sticky-sidebar-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.slick.js" id="jquery-slick-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jarallax.js" id="jarallax-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/masonry.min.js" id="masonry-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.masonry.min.js" id="jquery-masonry-js"></script>
</body>
</html>
<!-- Cache served by breeze CACHE - Last modified: Tue, 10 Mar 2026 17:16:07 GMT -->