Основы языка Transact-SQL. Основные элементы Transact-SQL. Типы данных MS SQL Server. Выражения Transact-SQL, страница 3

Типы данных char в ANSI, nchar в Unicode имеют фиксированный размер - всегда требуется один и тот же объем памяти при любом количестве символов, хранящихся в столбце. Например, одно значение столбца с типом char(10) занимает 10 байт памяти независимо от того, хранится ли в нем 1 символ или 10. Неиспользуемое пространство дополняется пробелами до максимально возможного количества символов в столбце.

42

В то же время, для хранения каждого символа в столбце требуется: при типе данных varchar(10) - 1 байт, при типе данных nvarchar(n) - 2 байта; при этом требуемый объем памяти зависит от заполнения столбца (т.е., столбец имеет переменный размер, и не происходит хранение «пустого места» - пробелов).

43

Типы данных text и ntext служат для хранения больших массивов символьных данных. Для столбцов с такими типами данных запрещены многие операции и функции. Из-за этих ограничений, начиная с версии СУБД SQL Server 2005, появились типы данных varchar(max) и nvarchar(max), которые объединяют возможности типов text/ntext, varchar/nvarchar, могут хранить до 2 Гб данных и не имеют ограничений по использованию с различными операциями и функциями.

44

3.6. Двоичные типы данных

45

Типы данных binary служат в основном для хранения файлов в SQL Server. Для хранения небольших файлов (например, групп файлов размером несколько Кб, содержащих различные данные в двоичном формате) используют типы данных binary/varbinary.

46

Часто используется тип данных image - служит для хранения как изображений, так и документов Word, Excel, PDF, Visio. Этот тип данных подходит для хранения любых файлов размером не более 2 Гб. Тип данных varbinary(max), впервые появившийся в SQL Server 2005, позволяет хранить такой же объем данных, как и image, и может применяться во всех операциях и функциях, где допустимы типы данных binary/varbinary.

3.7. Специальные типы данных

48

49

50

Тип данных sql_variant позволяет объявлять столбец или переменную без явного указания типа данных, которые будут в нем храниться. Затем sql_variant автоматически «преобразуется» к типу данных, добавляемых в столбец. В результате возможно появление различных проблем, связанных с несоответствием типов данных. Поэтому без явной необходимости применять тип данных sql_variant не рекомендуется.

51

  • Таким образом, в версии языка Transact-SQL для SQL Server 2005 (и выше) имеется
  • 6 категорий стандартных типов данных, используемых для определения столбцов в таблицах:
  • точные числовые типы данных - хранят точные целочисленные или десятичные значения;
  • приближенные числовые типы данных - хранят приближенные числа с плавающей точкой;

52

  • денежные типы данных - хранят денежные значения с точностью 4 знака после запятой;
  • типы данных «Дата и время» - хранят значения даты и времени;
  • символьные типы данных - хранят текстовые значения;
  • двоичные типы данных - хранят двоичные потоки, обычно это файлы.

Кроме приведенных системных типов данных таблиц, можно определять на их основе свои пользовательские типы данных для конкретной БД. В SQL Server 2008 появилось также несколько новых специализированных типов данных (рассмотрим далее).

54

3.8. Свойство IDENTITY

Кроме типов данных, для столбцов могут задаваться различные свойства. В частности, для одного столбца таблицы может быть задано свойство IDENTITY, которое определяет создание в столбце автоматически возрастающего значения. Это свойство имеет 2 параметра: исходное значение и инкремент, определяющий, насколько увеличивается исходное значение при генерировании каждого последующего значения.

55

Это свойство – аналог значений autonumber (в Access – тип данных Счетчик) и autoincrement в других языках. Свойство IDENTITY применимо к точным числовым типам: bigint, int, smallint, tinyint, decimal, numeric. Для использования с типами данных decimal, numeric необходимо приравнять в них число разрядов после запятой к нулю.

3.9. Общие рекомендации по выбору типа данных для столбца таблицы