В SQL є набір спеціальних типів даних, які використовуються для зберігання інформації. У більшості випадків інформація зберігається з допомогою більш традиційних типів даних, таких як цілі, із плаваючою крапкою і текстові. Дату і час можна зберігати за допомогою типів DATETIME і SMALLDATETIME.
І хоча для збереження 90% інформації достатньо перелічених типів даних, в деяких випадках можуть знадобитися менш традиційні, особливі типи даних. Наприклад, іноді виникає необхідність у збереженні даних, які приймають лише два значення — істинне чи хибне, так чи ні.
Тип ВІТ використовується для зберігання даних, які можуть приймати лише два значення. Для зберігання типу ВІТ виділяється лише один біт. У результаті можна зберегти лише два можливих значення – нуль (0) або одиницю (1). Якщо у поле, для якого визначений тип ВІТ, ввести значення, яке відрізняється від 0 і 1, то буде збережене значення 1. Тип ВІТ не можна використовувати для зберігання елементів NULL. При використанні типу ВІТ з допомогою одного байта можна представити дані, які знаходяться у восьми різноманітних полях таблиці, при чому поля типу ВІТ не обов’язково повинні бути суміжними. Якщо визначити дев’ять стовпців таблиці типу ВІТ, то для зберігання всіх цих даних буде виділено вже 2 байти.
Якщо для поля таблиці визначити тип TIMESTAMP, то кожного разу при додаванні нового чи оновленні існуючого рядка у поле TIMESTAMP буде автоматично поміщатися значення лічильника. У поле для якого визначений тип TIMESTAMP, не можна поміщати значення явним чином.
Значення лічильника, яке поміщається SQL Server у поле TIMESTAMP, вказує кількість операцій, виконаних SQL Server. Значення, введені у поле TIMESTAMP, зберігаються у форматі VARBINARY (8), а не у форматі DATETIME чи SMALLDATETIME. Для поля TIMESTAMP значення NULL дозволені по замовчуванню. Значення типу TIMESTAMP — це не дата і не час, але воно завжди є унікальним в межах таблиці і бази даних. Тип TIMESTAMP може бути визначеним тільки для одного поля таблиці.
Якщо при визначенні стовпця вказати тільки його ім’я і не задати тип даних, то стовпцю по замовчуванню буде присвоєний тип TIMESTAMP.
Тип UNIQUEIDENTIFIER — це шістнадцятирозрядний глобальний унікальний ідентифікатор (GUID). Головне призначення типу UNIQUEIDENTIFIER — підтримувати унікальність всіх записів при об’єднанні даних з багатьох різноманітних таблиць, які знаходились у різних базах даних.
Для типу UNIQUEIDENTIFIER дозволені тільки операції рівності і порівняння (= і <>) та оператори IS NOT NULL, IS NULL. Більше ніякі операції порівняння та арифметичні операції не дозволені. Для типу UNIQUEIDENTIFIER дозволені всі обмеження на поля і властивості, за винятком IDENTITY. Для кожного ідентифікатора GUID гарантовано унікальне значення.
Тип BINARY (n) використовується для зберігання бітових ланцюжків, розміром до 8000 байт. Ціле число n в дужках означає довжину цих бітових ланцюжків і може знаходитись в інтервалі від 1 до 8000 байт. Таким чином, мінімальний розмір, який дані типу BINARY (n) займають в пам’яті, — 1 байт. Але при цьому можна зберігати бітові ланцюжки, які складаються з одних нулів.
Тип VARBINARY (n) використовується для збереження бітових ланцюжків, довжиною до 8000 байт. Ціле число n в дужках означає довжину ланцюжків і може знаходитись в інтервалі від 1 до 8000 байт. Таким чином, мінімальний розмір, який дані типу VARBINARY (n) займають в пам’яті — 1 байт.
На відміну від типу BINARY, дані типу VARBINARY займають у пам’яті тільки те місце, яке їм необхідне відповідно до їх розмірів.
Типи TEXT і IMAGE використовуються для зберігання великих об’ємів текстових або двійкових даних. Обидва ці типи зберігають більше двох мільярдів байтів даних. Але дуже неекономно заздалегідь виділяти для типів TEXT і IMAGE значний об’єм памяті. Тому заздалегідь виділяється тільки частина цього об’єму. Решту простору розподіляється в динаміці.
Тип TEXT використовується для зберігання великих об’ємів тексту. Переважно у текстовому форматі зберігаються символи, які можна безпосередньо вивести на пристрій відображення. За допомогою типу TEXT можна зберігати від 1 до 2147483647 байт таких даних.
Дані типу TEXT зберігаються у вигляді рядів фіксованої довжини у першопочатково розподіленій для цього області розміром 8 Кбайт. Додаткові області по 8 Кбайт динамічно добавляються та об’єднуються разом. Області по 8 Кбайт є логічно суміжні, але при цьому вони не обов’язково повинні бути фізично суміжними.
Тип NTEXT використовується для зберігання символів у форматі Unicode. Основна різниця між типами TEXT і NTEXT полягає в тому, що для зберігання кожного символу Unicode потрібно 16 біт, чи 2 байти. Це означає, що у полі типу NTEXT можна зберігати тільки половину від максимально можливої кількості символів для типу TEXT, тобто тільки 1073741823.
Тип IMAGE можна використовувати для зберігання довгих ланцюжків двійкових даних, розміром від 1 до 2147483647 байт. Наприклад, в одному-єдиному значенні поля можна зберігати фотокартки працівників, картинки, малюнки. Дані зберігаються у вигляді елементів фіксованої довжини у початково розподіленій для них області пам’яті розміром 8 Кбайт.
Тип MONEY дозволяє зберігати грошові значення. Дані типу MONEY фізично зберігаються у вигляді 2 частин — цілої та дробової, за допомогою двох 4-байтних цілочисельних форматів. Тип MONEY дозволяє зберігати значення в інтервалі від -922337203685477,5808 до +922337203685477,5807. Значення цього типу зберігаються з точністю до десятитисячних частин грошової одиниці.
Тип SMALLMONEY дозволяє зберегти грошові значення у більш вузькому, в порівнянні з типом MONEY, діапазоні: від –214748,3648 до +214748,3647. Дані типу SMALLMONEY зберігаються у вигляді 2 частин — цілої і дробової, та займають в пам’яті 4 байти.