Прежде чем вы сможете начать создавать таблицы, следует разобраться с разными типами данных, которые можно применять для определения доменов столбцов в таблицах, т. е. какие данные можно вводить в столбец. В SQL Server есть два разных вида типов данных:
♦ системные типы данных SQL Server;
♦ определенные пользователем типы (User-defined types, UDT) или типы общеязыковой среды исполнения (SQL Common Language Runtime, SQLCLR).
Имеющиеся системные типы данных обычно делят на несколько групп, включая точные числовые, приближенные числовые, символьные, даты и время суток и двоичные.
В SQL Server включено довольно много строковых типов данных: char, varchar, nchar, nvarchar, text и ntext. Типы text и ntext не одобряются, поэтому они были заменены типами varchar (max) и nvarchar (max).
Все char-типы принимают один параметр — количество символов для хранения данных. Разница между char и varchar (как и между nchar и nvarchar) состоит в том, что char— тип данных фиксированной длины, a varchar— переменной длины. Это означает, что для char всегда выделяется столько памяти, сколько необходимо для хранения данных объявленной длины, a varchar хранит только реальные введенные данные. Преимущество применения char по сравнению с varchar заключается в том, что для обновлений столбца типа char никогда не требуется перемещения строки, т. к. вводимые данные всегда соответствуют отведенному объему памяти. Это преимущество почти всегда перевешивает, несмотря на то, что тип varchar использует гораздо меньше памяти, чем char.
Типы nchar и nvarchar. хранят символы, используя страницу универсального кода Unicode (UCS-2). Это значит, что если применять тип nchar или nvarchar, можно хранить символы любого типа, независимо от выбранного вами набора параметров символьной обработки, потому что для хранения каждого символа всегда используются два байта. Типы varchar и char хранят символы в одном или двух байтах в зависимости от набора параметров символьной обработки.
Точные числовые типы состоят из типов integer (или целое число) и типов с фиксированной десятичной точкой.
Тип данных |
Объем памяти |
Допустимые значения |
Примечания |
tinyint |
1 байт |
0—255 |
Эквивалентен типу данных byte в большинстве языков программирования, не может хранить отрицательные значения |
smallint |
2 байта |
-32 768—32 767 |
Знаковое 16-разрядное целое |
int |
4 байта |
-2 147 483 648— 2 147 483 647 |
Знаковое 32-разрядное целое |
bigint |
8 байтов |
-2х1063—2х1063-1 |
Знаковое 64-разрядное целое |
decimal (разрядность, количество знаков в дробной части) |
От 5 до 17 байтов в зависимости от точности |
-10х1038 + 1 — 10х1038-1 |
Десятичное число, содержащее до 38 цифр |
numeric (разрядность, количество знаков в дробной части) |
Функционально эквивалентен типу данных decimal |
У целочисленных типов данных (tinyint, smallint, int и bigint) нет параметров, а у decimal (и numeric) есть.
Применяя тип данных decimal, можно задать разрядность (precision) и количество десятичных знаков в дробной части (scale) для хранимого значения данного типа.
♦ Разрядность определяет общее количество цифр, поддерживаемое типом данных, максимальная разрядность равна 38, а количество знаков в дробной части определяет, сколько цифр, заданных в разрядности, отводится под дробную часть. Тип, определенный как decimal(38,0), позволяет хранить только целые числа, а тип decimal (38, 38) — только десятичные дроби.
♦ Если вы определите столбец просто как decimal, без указания разрядности и количества десятичных знаков после запятой, он получит по умолчанию разрядность, равную 18, и 0 для знаков в дробной части.
В зависимости от заданной вами разрядности типу данных decimal требуется от 5 до 17 байтов памяти. Для экономии области хранения и ресурсов памяти важно выбирать минимально допустимую разрядность. Количество знаков в дробной части не влияет на требуемый объем памяти.
Разрядность |
Память, байт |
От 1 до 9 |
5 |
От 10 до 19 |
9 |
От 20 до 28 |
13 |
От 29 до 38 |
17 |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.