HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <ul><li><a>Основные характеристики</a></li>
1 <ul><li><a>Основные характеристики</a></li>
2 <li><a>Типы</a><ul><li><a>Секционированные</a></li>
2 <li><a>Типы</a><ul><li><a>Секционированные</a></li>
3 <li><a>Временные</a></li>
3 <li><a>Временные</a></li>
4 <li><a>Производные</a></li>
4 <li><a>Производные</a></li>
5 <li><a>Системные</a></li>
5 <li><a>Системные</a></li>
6 <li><a>Широкие</a></li>
6 <li><a>Широкие</a></li>
7 </ul></li>
7 </ul></li>
8 <li><a>Создание сводных таблиц с помощью SQL</a><ul><li><a>1. Оператор CASE и его аналоги</a></li>
8 <li><a>Создание сводных таблиц с помощью SQL</a><ul><li><a>1. Оператор CASE и его аналоги</a></li>
9 <li><a>2. PIVOT (SQL Server)</a></li>
9 <li><a>2. PIVOT (SQL Server)</a></li>
10 <li><a>3. CTE</a></li>
10 <li><a>3. CTE</a></li>
11 <li><a>4. Функция CROSSTAB</a></li>
11 <li><a>4. Функция CROSSTAB</a></li>
12 <li><a>5. Динамический SQL</a></li>
12 <li><a>5. Динамический SQL</a></li>
13 </ul></li>
13 </ul></li>
14 <li><a>Как создать таблицу с Transact-SQL (Table)</a><ul><li><a>CREATE TABLE</a></li>
14 <li><a>Как создать таблицу с Transact-SQL (Table)</a><ul><li><a>CREATE TABLE</a></li>
15 <li><a>Используемые предложения</a></li>
15 <li><a>Используемые предложения</a></li>
16 </ul></li>
16 </ul></li>
17 <li><a>Как вывести информацию о полях</a></li>
17 <li><a>Как вывести информацию о полях</a></li>
18 </ul><p>Предлагаем вспомнить (а при необходимости и изучить) полезную информацию о Microsoft SQL таблицах, их особенностях и характеристиках. Они создаются с помощью различных инструментов и могут быть представлены в нескольких видах. Рассмотрим подробнее.</p>
18 </ul><p>Предлагаем вспомнить (а при необходимости и изучить) полезную информацию о Microsoft SQL таблицах, их особенностях и характеристиках. Они создаются с помощью различных инструментов и могут быть представлены в нескольких видах. Рассмотрим подробнее.</p>
19 <h2>Основные характеристики</h2>
19 <h2>Основные характеристики</h2>
20 <p>Таблицы - это логически организованные хранилища данных (объектов), представленные в виде строк и столбцов. Классическим примером может служить таблица, в которой собрана информацию о работниках компании. Так, в ней для каждого отдельного работника выделена строка, а сведения, касающиеся каждого работника представлены в столбцах (ФИО, занимаемая должность, по какому адресу прописка, номера телефонов и т.д.).</p>
20 <p>Таблицы - это логически организованные хранилища данных (объектов), представленные в виде строк и столбцов. Классическим примером может служить таблица, в которой собрана информацию о работниках компании. Так, в ней для каждого отдельного работника выделена строка, а сведения, касающиеся каждого работника представлены в столбцах (ФИО, занимаемая должность, по какому адресу прописка, номера телефонов и т.д.).</p>
21 <p>Количество таблиц в базе данных (БД) ограничивается лишь числом объектов, которые доступны в ней (2 147 483 647). Наибольшее количество столбцов в стандартной таблице, определяемой пользователем - 1024. Общий размер таблицы (SIZE TABLE), как и количество строк, ограничивается лишь объемом пространства, требуемого для хранения информации на сервере.</p>
21 <p>Количество таблиц в базе данных (БД) ограничивается лишь числом объектов, которые доступны в ней (2 147 483 647). Наибольшее количество столбцов в стандартной таблице, определяемой пользователем - 1024. Общий размер таблицы (SIZE TABLE), как и количество строк, ограничивается лишь объемом пространства, требуемого для хранения информации на сервере.</p>
22 <p>Чтобы управлять данными и характеристики таблицы, для нее и каждого столбца в отдельности, определяются свойства. Также реализована возможность:</p>
22 <p>Чтобы управлять данными и характеристики таблицы, для нее и каждого столбца в отдельности, определяются свойства. Также реализована возможность:</p>
23 <ul><li>присвоения ограничений ключу, обеспечивающему уникальность;</li>
23 <ul><li>присвоения ограничений ключу, обеспечивающему уникальность;</li>
24 <li>установки связей между различными таблицами.</li>
24 <li>установки связей между различными таблицами.</li>
25 </ul><p>Чтобы на странице отображалось максимальное количество строк, данные могу сжиматься по строкам либо страницам.</p>
25 </ul><p>Чтобы на странице отображалось максимальное количество строк, данные могу сжиматься по строкам либо страницам.</p>
26 <p>С таблицами можно выполнять различные операции: изменять, добавлять, удалять, получать данные.</p>
26 <p>С таблицами можно выполнять различные операции: изменять, добавлять, удалять, получать данные.</p>
27 <h2>Типы</h2>
27 <h2>Типы</h2>
28 <p>В SQL Server предусмотрено разбиение таблиц на типы. Каждый тип предназначен для достижения определенных целей в БД. Кроме стандартных, существуют такие типы таблиц:</p>
28 <p>В SQL Server предусмотрено разбиение таблиц на типы. Каждый тип предназначен для достижения определенных целей в БД. Кроме стандартных, существуют такие типы таблиц:</p>
29 <h3>Секционированные</h3>
29 <h3>Секционированные</h3>
30 <p>Такими таблицами называю те, в которых информация поделена секциями (блоками) горизонтально. Блоки могут распределяться между разными группами файлов в БД. Разбиение на секции облегчает управление индексами и таблицами огромных размеров.</p>
30 <p>Такими таблицами называю те, в которых информация поделена секциями (блоками) горизонтально. Блоки могут распределяться между разными группами файлов в БД. Разбиение на секции облегчает управление индексами и таблицами огромных размеров.</p>
31 <p>Разделение на секции позволяет мгновенно иметь доступ к наборам данных, а также управлять ими максимально эффективно, соблюдая целостность общей коллекции. В SQL Server по умолчанию поддерживается до 15000 секций.</p>
31 <p>Разделение на секции позволяет мгновенно иметь доступ к наборам данных, а также управлять ими максимально эффективно, соблюдая целостность общей коллекции. В SQL Server по умолчанию поддерживается до 15000 секций.</p>
32 <h3>Временные</h3>
32 <h3>Временные</h3>
33 <p>Такие таблицы сохраняются в базе данных tempdb, по умолчанию содержащуюся в MS SQL Server и также называют темпоральными. Они полезны для хранения табличных данных как части сложного комплексного скрипта. Срок существования - сессия БД. Потому временные таблицы удобно использовать для промежуточных, временных данных.</p>
33 <p>Такие таблицы сохраняются в базе данных tempdb, по умолчанию содержащуюся в MS SQL Server и также называют темпоральными. Они полезны для хранения табличных данных как части сложного комплексного скрипта. Срок существования - сессия БД. Потому временные таблицы удобно использовать для промежуточных, временных данных.</p>
34 <p>При создании временной таблицы с помощью CREATE TABLE в SSMS (QUERY Editor), ее срок существования будет ограничен тем временем, пока открыт данный редактор запросов. Потому, к темпоральной таблице можно обращаться из разных скриптов внутри редактора SSMS.</p>
34 <p>При создании временной таблицы с помощью CREATE TABLE в SSMS (QUERY Editor), ее срок существования будет ограничен тем временем, пока открыт данный редактор запросов. Потому, к темпоральной таблице можно обращаться из разных скриптов внутри редактора SSMS.</p>
35 <p>В том случае, когда нужно удалить таблицу еще до окончания сессии, используется команда DROP TABLE.</p>
35 <p>В том случае, когда нужно удалить таблицу еще до окончания сессии, используется команда DROP TABLE.</p>
36 <p>У всех темпоральных таблиц - первый символ #. Они делятся на два вида:</p>
36 <p>У всех темпоральных таблиц - первый символ #. Они делятся на два вида:</p>
37 <ul><li>локальные - доступные лишь текущему соединению пользователя. В начале таблицы находится символ (#). После отключения пользователем от экземпляра SQL Server сразу удаляются;</li>
37 <ul><li>локальные - доступные лишь текущему соединению пользователя. В начале таблицы находится символ (#). После отключения пользователем от экземпляра SQL Server сразу удаляются;</li>
38 <li>глобальные - доступные всем пользователям. Начинаются с двойного символа (##).Будут удалены после того, как отключатся от SQL Server все пользователи, ссылавшиеся на них.</li>
38 <li>глобальные - доступные всем пользователям. Начинаются с двойного символа (##).Будут удалены после того, как отключатся от SQL Server все пользователи, ссылавшиеся на них.</li>
39 </ul><p>SQL Server 2019 (15.x) на всех уровнях совместимости структур БД с помощью временных таблиц уменьшает количество повторных компиляций.</p>
39 </ul><p>SQL Server 2019 (15.x) на всех уровнях совместимости структур БД с помощью временных таблиц уменьшает количество повторных компиляций.</p>
40 <p>SQL Server дополнительно производит простые проверки во избежание неоправданных перекомпиляций:</p>
40 <p>SQL Server дополнительно производит простые проверки во избежание неоправданных перекомпиляций:</p>
41 <ul><li>на совпадение модуля внешней области, использованного для формирования временной таблицы при компиляции, с тем, который будет использоваться для следующих операций;</li>
41 <ul><li>на совпадение модуля внешней области, использованного для формирования временной таблицы при компиляции, с тем, который будет использоваться для следующих операций;</li>
42 <li>проводит отслеживание каждого изменения языка DDL определения данных, полученные при первичной компиляции, а также сравнение их с операциями DDL при следующих запусках.</li>
42 <li>проводит отслеживание каждого изменения языка DDL определения данных, полученные при первичной компиляции, а также сравнение их с операциями DDL при следующих запусках.</li>
43 </ul><p>В итоге уменьшается количество ненужных перекомпиляций, а также понижается нагрузка на ЦП.</p>
43 </ul><p>В итоге уменьшается количество ненужных перекомпиляций, а также понижается нагрузка на ЦП.</p>
44 <h3>Производные</h3>
44 <h3>Производные</h3>
45 <p>В отличие от предыдущих, производные таблицы более эффективны в плане производительности. Их также можно создавать в MS SQL Server задав ключевым словом WITH.</p>
45 <p>В отличие от предыдущих, производные таблицы более эффективны в плане производительности. Их также можно создавать в MS SQL Server задав ключевым словом WITH.</p>
46 <p>Отличаются от предыдущих еще и тем, что хранятся в оперативной памяти. Они будут существовать лишь во время первого выполнения запросов (QUERIES), представляющих данную таблицу.</p>
46 <p>Отличаются от предыдущих еще и тем, что хранятся в оперативной памяти. Они будут существовать лишь во время первого выполнения запросов (QUERIES), представляющих данную таблицу.</p>
47 <h3>Системные</h3>
47 <h3>Системные</h3>
48 <p>Системным называют специальный набор таблиц, в котором SQL Server сохраняет информацию, определяющую конфигурацию сервера вместе со всеми его таблицами. Всем пользователям не доступно выполнение прямого запроса либо обновления таких таблиц.</p>
48 <p>Системным называют специальный набор таблиц, в котором SQL Server сохраняет информацию, определяющую конфигурацию сервера вместе со всеми его таблицами. Всем пользователям не доступно выполнение прямого запроса либо обновления таких таблиц.</p>
49 <p>Информация из системных таблиц может быть доступной лишь через представления системы.</p>
49 <p>Информация из системных таблиц может быть доступной лишь через представления системы.</p>
50 <h3>Широкие</h3>
50 <h3>Широкие</h3>
51 <p>В таких таблицах применяются разреженные списки. Это дает возможность расширить в них общее количество столбцов и статистик до 30000, а индексов - до 1000.</p>
51 <p>В таких таблицах применяются разреженные списки. Это дает возможность расширить в них общее количество столбцов и статистик до 30000, а индексов - до 1000.</p>
52 <p>Разреженные столбцы делают возможным уменьшение пространства, в котором хранится значение NULL. Но возрастает стоимость принятия значений, не равных NULL. Они определяют набор столбцов, представляющий нетипичное XML-представление, где все разреженные столбцы консолидированы в структурированную выходную информацию.</p>
52 <p>Разреженные столбцы делают возможным уменьшение пространства, в котором хранится значение NULL. Но возрастает стоимость принятия значений, не равных NULL. Они определяют набор столбцов, представляющий нетипичное XML-представление, где все разреженные столбцы консолидированы в структурированную выходную информацию.</p>
53 <p>В широких таблицах размеры строк - до 8019 байт. Не меняется максимально допустимое количество неразряженных и вычисляемых столбцов (равно 1024).</p>
53 <p>В широких таблицах размеры строк - до 8019 байт. Не меняется максимально допустимое количество неразряженных и вычисляемых столбцов (равно 1024).</p>
54 <p>Они оказывают влияние на эффективность:</p>
54 <p>Они оказывают влияние на эффективность:</p>
55 <ol><li>Повышаются расходы на обслуживание табличных индексов. Потому специалисты советуют сократить в ней количество индексов, оставив лишь необходимые. С ростом индексов соответственно растут требования не только к памяти, но и времени компиляции DML. Должны быть отфильтрованы, применимы к подмножествам данных некластеризованные индексы.</li>
55 <ol><li>Повышаются расходы на обслуживание табличных индексов. Потому специалисты советуют сократить в ней количество индексов, оставив лишь необходимые. С ростом индексов соответственно растут требования не только к памяти, но и времени компиляции DML. Должны быть отфильтрованы, применимы к подмножествам данных некластеризованные индексы.</li>
56 <li>Динамическое добавление или удаление столбцов возможно через приложение. Скомпилированные планы запросов становятся также недействительными. При разработке приложений должна учитываться предполагаемая рабочая нагрузка. Это позволит минимизировать риск изменений в схеме.</li>
56 <li>Динамическое добавление или удаление столбцов возможно через приложение. Скомпилированные планы запросов становятся также недействительными. При разработке приложений должна учитываться предполагаемая рабочая нагрузка. Это позволит минимизировать риск изменений в схеме.</li>
57 <li>На производительность оказывает влияние как удаление, так и добавление информации. Это также нужно учитывать при разработке приложений, стараясь свести к минимуму изменения в данных.</li>
57 <li>На производительность оказывает влияние как удаление, так и добавление информации. Это также нужно учитывать при разработке приложений, стараясь свести к минимуму изменения в данных.</li>
58 <li>В широких таблицах необходимо ограничить реализацию инструкций DML, которые обновляют строки ключа кластеризации. Причина - может понадобиться большой объем ресурсов для выполнения и компиляции вышеуказанной инструкции.</li>
58 <li>В широких таблицах необходимо ограничить реализацию инструкций DML, которые обновляют строки ключа кластеризации. Причина - может понадобиться большой объем ресурсов для выполнения и компиляции вышеуказанной инструкции.</li>
59 <li>Для выполнения операций по переключению секций может понадобиться большой объем памяти, а значит, и продолжительный промежуток времени на выполнение.</li>
59 <li>Для выполнения операций по переключению секций может понадобиться большой объем памяти, а значит, и продолжительный промежуток времени на выполнение.</li>
60 <li>Для оптимизации работы курсоров обновления (отвечающих за обновление нужных строк) требуется явное перечисление этих столбцов в FOR UPDATE.</li>
60 <li>Для оптимизации работы курсоров обновления (отвечающих за обновление нужных строк) требуется явное перечисление этих столбцов в FOR UPDATE.</li>
61 </ol><p>Сводные таблицы относятся к базовым видам аналитики. Их можно создать с помощью SQL (вопреки мнению большинства). И хоть это не так быстро, как в MS Excel, решения в SQL достаточно просты.</p>
61 </ol><p>Сводные таблицы относятся к базовым видам аналитики. Их можно создать с помощью SQL (вопреки мнению большинства). И хоть это не так быстро, как в MS Excel, решения в SQL достаточно просты.</p>
62 <h3>1. Оператор CASE и его аналоги</h3>
62 <h3>1. Оператор CASE и его аналоги</h3>
63 <p>Наиболее очевидный, а значит и простой метод создания сводных таблиц - это hardcode с применением оператора CASE. Его можно заменить какой-либо функцией из vendor-specific, но оно того не стоит.</p>
63 <p>Наиболее очевидный, а значит и простой метод создания сводных таблиц - это hardcode с применением оператора CASE. Его можно заменить какой-либо функцией из vendor-specific, но оно того не стоит.</p>
64 <p>К примеру, заменой может стать оператор FILTER (доступный в SQLite и PostgreSQL). Но у него определенная специфика. Несмотря на то, что он принадлежит стандарту (SQL: 2003), но по факту получает поддержку только в вышеперечисленных SQLite и PostgreSQL.</p>
64 <p>К примеру, заменой может стать оператор FILTER (доступный в SQLite и PostgreSQL). Но у него определенная специфика. Несмотря на то, что он принадлежит стандарту (SQL: 2003), но по факту получает поддержку только в вышеперечисленных SQLite и PostgreSQL.</p>
65 <p>Иные СУБД также обладают аналогами CASE, которые не предусмотрены стандартами:</p>
65 <p>Иные СУБД также обладают аналогами CASE, которые не предусмотрены стандартами:</p>
66 <ul><li>SQL Server 2012+ - IIF;</li>
66 <ul><li>SQL Server 2012+ - IIF;</li>
67 <li>в MySQL - IF;</li>
67 <li>в MySQL - IF;</li>
68 <li>в Oracle - DECODE.</li>
68 <li>в Oracle - DECODE.</li>
69 </ul><p>Чаще всего использование аналогов не оправдано, т.к. преимуществ они не дают, а поддержку кода в будущем значительно усложняют.</p>
69 </ul><p>Чаще всего использование аналогов не оправдано, т.к. преимуществ они не дают, а поддержку кода в будущем значительно усложняют.</p>
70 <h3>2. PIVOT (SQL Server)</h3>
70 <h3>2. PIVOT (SQL Server)</h3>
71 <p>Использование оператора CASE вместе с аналогами, описанное выше, не очень впечатляет. Гораздо удобнее использовать разворот таблицы (PIVOT TABLE) в SQL Server. Несмотря на то, что данный оператор не предусмотрен стандартами SQL, СУБД предлагает аналогичный синтаксис.</p>
71 <p>Использование оператора CASE вместе с аналогами, описанное выше, не очень впечатляет. Гораздо удобнее использовать разворот таблицы (PIVOT TABLE) в SQL Server. Несмотря на то, что данный оператор не предусмотрен стандартами SQL, СУБД предлагает аналогичный синтаксис.</p>
72 <h3>3. CTE</h3>
72 <h3>3. CTE</h3>
73 <p>Оператор PIVOT не единственный, который может "повернуть". С помощью стандартного синтаксиса запрос можно переписать. Для этого следует воспользоваться комбинацией CTE (Common Table Expression) и возможными соединениями.</p>
73 <p>Оператор PIVOT не единственный, который может "повернуть". С помощью стандартного синтаксиса запрос можно переписать. Для этого следует воспользоваться комбинацией CTE (Common Table Expression) и возможными соединениями.</p>
74 <h3>4. Функция CROSSTAB</h3>
74 <h3>4. Функция CROSSTAB</h3>
75 <p>В PostgreSQL существует функция, приблизительно идентичная PIVOT в Microsoft SQL - CROSSTAB. Для начала работы понадобится tablefunc.</p>
75 <p>В PostgreSQL существует функция, приблизительно идентичная PIVOT в Microsoft SQL - CROSSTAB. Для начала работы понадобится tablefunc.</p>
76 <p>Особенности использования CROSSTAB:</p>
76 <p>Особенности использования CROSSTAB:</p>
77 <ul><li>основным аргументом воспринимает запрос в виде text sql. Он идентичен тому, что и для PIVOT, но с обязательной сортировкой;</li>
77 <ul><li>основным аргументом воспринимает запрос в виде text sql. Он идентичен тому, что и для PIVOT, но с обязательной сортировкой;</li>
78 <li>от PIVOT отличается тем, что для разворота таблицы понадобится прописывать не только наименования столбцов, но и типы данных;</li>
78 <li>от PIVOT отличается тем, что для разворота таблицы понадобится прописывать не только наименования столбцов, но и типы данных;</li>
79 <li>заполнение строк происходит слева направо, пропуская значения NULL. Т.е. строки, в которых будут значения NULL, "съедут" влево. В результате, корректными будут лишь те строки, в которых были заполнены все значения. Значит, если они были отличны от NULL, то запрос был корректным и вернет нужный результат. Чтобы избежать подобного поведения функции CROSSTAB необходимо применять вариант с двумя аргументами. Второй из них должен включать запрос, который будет в итоге выводить перечень столбцов.</li>
79 <li>заполнение строк происходит слева направо, пропуская значения NULL. Т.е. строки, в которых будут значения NULL, "съедут" влево. В результате, корректными будут лишь те строки, в которых были заполнены все значения. Значит, если они были отличны от NULL, то запрос был корректным и вернет нужный результат. Чтобы избежать подобного поведения функции CROSSTAB необходимо применять вариант с двумя аргументами. Второй из них должен включать запрос, который будет в итоге выводить перечень столбцов.</li>
80 </ul><h3>5. Динамический SQL</h3>
80 </ul><h3>5. Динамический SQL</h3>
81 <p>Запросы, включающие PIVOT или CROSSTAB более функциональны, чем те, которые содержали CASE (либо CTE), однако некоторые значения все еще приходится заносить руками. Когда их огромное количество либо список регулярно обновляется, то идеально выбирать значения автоматически из словаря (если он имеется) либо select distinct supplier from test supply.</p>
81 <p>Запросы, включающие PIVOT или CROSSTAB более функциональны, чем те, которые содержали CASE (либо CTE), однако некоторые значения все еще приходится заносить руками. Когда их огромное количество либо список регулярно обновляется, то идеально выбирать значения автоматически из словаря (если он имеется) либо select distinct supplier from test supply.</p>
82 <p>Для этого понадобится динамический SQL. Чтобы получить такую строку в SQL Server можно воспользоваться STUFF, а затем добавить ее в окончательный запрос. Однако для любого использования динамического SQL понадобится углубиться в специфику конкретной СУБД вместе с соответствующим ей процедурным решением SQL.</p>
82 <p>Для этого понадобится динамический SQL. Чтобы получить такую строку в SQL Server можно воспользоваться STUFF, а затем добавить ее в окончательный запрос. Однако для любого использования динамического SQL понадобится углубиться в специфику конкретной СУБД вместе с соответствующим ей процедурным решением SQL.</p>
83 <h2>Как создать таблицу с Transact-SQL (Table)</h2>
83 <h2>Как создать таблицу с Transact-SQL (Table)</h2>
84 <p>Transact-SQL - это набор данных специального назначения, предназначенный для хранения конечного набора. Чаще всего применяется для хранения набора строк в течение короткого временного отрезка, которые возвращаются в качестве конечного набора функций с соответствующим значением из таблицы.</p>
84 <p>Transact-SQL - это набор данных специального назначения, предназначенный для хранения конечного набора. Чаще всего применяется для хранения набора строк в течение короткого временного отрезка, которые возвращаются в качестве конечного набора функций с соответствующим значением из таблицы.</p>
85 <p>Функциям и их переменным может соответствовать тип table.</p>
85 <p>Функциям и их переменным может соответствовать тип table.</p>
86 <h3>CREATE TABLE</h3>
86 <h3>CREATE TABLE</h3>
87 <p>Данная инструкция генерирует новую MS SQL таблицу, в которой присутствуют все нужные столбцы необходимого типа данных. Из одной БД может быть создано ограниченное число таблиц. В ней не может быть свыше 2 млрд. объектов (TABLES, ограничений, триггеров, представлений, хранимых процедур).</p>
87 <p>Данная инструкция генерирует новую MS SQL таблицу, в которой присутствуют все нужные столбцы необходимого типа данных. Из одной БД может быть создано ограниченное число таблиц. В ней не может быть свыше 2 млрд. объектов (TABLES, ограничений, триггеров, представлений, хранимых процедур).</p>
88 <p>В CREATE TABLE используется синтаксис:</p>
88 <p>В CREATE TABLE используется синтаксис:</p>
89 <ul><li>table_name - имя базовой таблицы;</li>
89 <ul><li>table_name - имя базовой таблицы;</li>
90 <li>col_name1 и т.д. - наименования столбцов;</li>
90 <li>col_name1 и т.д. - наименования столбцов;</li>
91 <li>type1 и т.д. - типы данных.</li>
91 <li>type1 и т.д. - типы данных.</li>
92 </ul><p>Наименование объекта БД формируется из важных составляющих:</p>
92 </ul><p>Наименование объекта БД формируется из важных составляющих:</p>
93 <p>[server_name.[db_name.[schema_name.]]]object_name</p>
93 <p>[server_name.[db_name.[schema_name.]]]object_name</p>
94 <p>В формуле использованы следующие обозначения:</p>
94 <p>В формуле использованы следующие обозначения:</p>
95 <ul><li>server_name - наименование сервера, к которому относится объект БД;</li>
95 <ul><li>server_name - наименование сервера, к которому относится объект БД;</li>
96 <li>db_name - наименование БД, к которой относится таблица;</li>
96 <li>db_name - наименование БД, к которой относится таблица;</li>
97 <li>schema_name - название схемы, к которой относится таблица;</li>
97 <li>schema_name - название схемы, к которой относится таблица;</li>
98 <li>object_name - наименование таблицы.</li>
98 <li>object_name - наименование таблицы.</li>
99 </ul><p>Если в столбце не разрешены значения NULL (NOT NULL), то наличие такого значения становится невозможным. При любой попытке вставки в столбец значения NULL, система будет возвращать сообщения о наличии ошибки.</p>
99 </ul><p>Если в столбце не разрешены значения NULL (NOT NULL), то наличие такого значения становится невозможным. При любой попытке вставки в столбец значения NULL, система будет возвращать сообщения о наличии ошибки.</p>
100 <p>Генерация таблицы всегда происходит в схеме БД. Ее генерация пользователем возможна лишь в той схеме, на которую юзер получил разрешения для реализации инструкции ALTER. Юзеры с ролями sysadmin, db_ddladmin, db_owner могут работать над созданием таблиц в любой схеме.</p>
100 <p>Генерация таблицы всегда происходит в схеме БД. Ее генерация пользователем возможна лишь в той схеме, на которую юзер получил разрешения для реализации инструкции ALTER. Юзеры с ролями sysadmin, db_ddladmin, db_owner могут работать над созданием таблиц в любой схеме.</p>
101 <p>Используются аргументы table_type_definition и collation_definition.</p>
101 <p>Используются аргументы table_type_definition и collation_definition.</p>
102 <h3>Используемые предложения</h3>
102 <h3>Используемые предложения</h3>
103 <p>В инструкциях CREATE TABLE или ALTER TABLE используются предложения:</p>
103 <p>В инструкциях CREATE TABLE или ALTER TABLE используются предложения:</p>
104 <ul><li>UNIQUE - определение потенциального ключа (столбец или их группы, имеющие уникальные значения, которые можно применять как первичный ключ);</li>
104 <ul><li>UNIQUE - определение потенциального ключа (столбец или их группы, имеющие уникальные значения, которые можно применять как первичный ключ);</li>
105 <li>PRIMARY KEY - определение первичного ключа (столбца либо их группы, имеющих различные значения в строках);</li>
105 <li>PRIMARY KEY - определение первичного ключа (столбца либо их группы, имеющих различные значения в строках);</li>
106 <li>CHECK - постановка ограничений для проверок, которые определяют условия для данных, подставляемых в столбец;</li>
106 <li>CHECK - постановка ограничений для проверок, которые определяют условия для данных, подставляемых в столбец;</li>
107 <li>FOREIGN KEY - определение внешнего ключа (столбец либо их группа, которые содержат значения, равные со значением первичного ключа в той либо иной таблицах).</li>
107 <li>FOREIGN KEY - определение внешнего ключа (столбец либо их группа, которые содержат значения, равные со значением первичного ключа в той либо иной таблицах).</li>
108 </ul><p>Опции ON DELETE и ON UPDATE используются при удалении или модификации первичного ключа.</p>
108 </ul><p>Опции ON DELETE и ON UPDATE используются при удалении или модификации первичного ключа.</p>
109 <h2>Как вывести информацию о полях</h2>
109 <h2>Как вывести информацию о полях</h2>
110 <p>Информация о полях, их размере и типах окажется очень полезной, когда понадобится анализ структуры базы данных или необходимости ее документирования. Для ее составления понадобятся две системные таблицы:</p>
110 <p>Информация о полях, их размере и типах окажется очень полезной, когда понадобится анализ структуры базы данных или необходимости ее документирования. Для ее составления понадобятся две системные таблицы:</p>
111 <ul><li>syscolumns - сохраняет список столбцов таблиц базы данных;</li>
111 <ul><li>syscolumns - сохраняет список столбцов таблиц базы данных;</li>
112 <li>systypes - сохраняет список типов данных.</li>
112 <li>systypes - сохраняет список типов данных.</li>
113 </ul><p>Также данные о табличных столбцах, включая поля, можно получить, обратившись к хранимой процедуре sp_help. Это гораздо простой способ, но обладает меньшей функциональностью. Это связано с тем, что у процедуры sp_help нет выходных параметров. А потому, произвести обработку набора данных, отображаемого ею, невозможно.</p>
113 </ul><p>Также данные о табличных столбцах, включая поля, можно получить, обратившись к хранимой процедуре sp_help. Это гораздо простой способ, но обладает меньшей функциональностью. Это связано с тем, что у процедуры sp_help нет выходных параметров. А потому, произвести обработку набора данных, отображаемого ею, невозможно.</p>
114 <p>Следовательно, описанный способ сможет подойти администратору баз данных лишь в качестве специфического отчета о структуре таблицы, но не больше.</p>
114 <p>Следовательно, описанный способ сможет подойти администратору баз данных лишь в качестве специфического отчета о структуре таблицы, но не больше.</p>
115 <p>Изучайте или вспоминайте материал, применяйте на практике. При возникновении вопросов - обязательно задавайте их.</p>
115 <p>Изучайте или вспоминайте материал, применяйте на практике. При возникновении вопросов - обязательно задавайте их.</p>
116 <a></a><p>Также приглашаем на <a>специальный курс по MS SQL в Otus</a>.</p>
116 <a></a><p>Также приглашаем на <a>специальный курс по MS SQL в Otus</a>.</p>
117  
117