Типи даних мови TRANSACT-SQL

З об'єктом, що містить дані, пов'язаний тип, що визначає вид даних, які можуть зберігатися в об'єкті, наприклад символи, цілі числа або двійкові дані. Типи даних мають наступні об'єкти:

· стовпці таблиць і представлень;

· параметри процедур, що зберігаються;

· змінні;

· функції Transact - SQL, повертаючі одне або декілька значень конкретного типу даних;

· процедури, що зберігаються, повертають значення (це значення завжди має тип integer).

При призначенні типу даних об'єкту визначаються чотири атрибути об'єкту :

· вид даних, що містяться в об'єкті;

· розмір або довжина значення, що зберігається об'єктом;

· точність числа (тільки у разі числових типів);

· масштаб числа (тільки у разі числових типів).

Прості типи даних в SQL, як і в переважній більшості інших мов, можна розділити на декілька груп: числові, строкові, дати і часу і ін. Основні типи даних представлені в таблицях 7.3-7.8.

Таблиця 7.3 - Числові типи даних Transact - SQL

Назва Опис
int 32-хразрядное ціле зі знаком (4 байти) в діапазоні від - 2147483648 до 2147483647.
bigint 64-хразрядное ціле зі знаком (8 байт) в діапазоні від - 9223372036854775808 до 9223372036854775807.
smallint 16-иразрядное ціле зі знаком (2 байти) в діапазоні від - 32768 до 32767.
tinyint 8-иразрядное ціле без знаку (1 байт) в діапазоні від 0 до 255.
bit 1-оразрядное ціле, замінює логічний тип даних, як 1 байт (8 біт), може набувати значень: або 0, або 1.
decimal чи numeric Дійсне число з фіксованою комою. Назва може бути скорочена до dec. Синтаксис визначення decimal(p, s), де p - точність (кількість десяткових розрядів числа) від 1 до 38, s - масштаб (кількість десяткових розрядів після коми) від 0 до p. У пам'яті значення цього типу займають різне число байт, залежне від точності при точності 1-9 знаків - 5 байт, при точності 10-19 знаків - 9 байт, при точності 20-28 знаків - 13 байт, при точності 29-38 знаків - 17 байт
float Дійсне число з плаваючою комою. Синтаксис визначення : float[(p)], де p - точність (число знаків основи) від 1 до 53. При точності 1-24 знаків для зберігання числа виділяється 4 байти пам'яті, а при точності 25-53 знаки - 8 байт. За умовчанням p = 53.

 

Таблиця 7.4 - Грошові типи даних Transact - SQL

Назва Опис
money Дійсне число з фіксованою комою (4 знаки після коми). Займає 64 розряди (8 байт). Може набувати значень - 922337203685477,5808 до 922337203685477,5807.
smallmoney Аналогічно money, тільки 32-хразрядное (4 байти), але також 4 знаки після коми. Може набувати значень - 214748,3648 до 214748,3647.

 

Таблиця 7.5 - Символьні типи даних Transact - SQL

Назва Опис
char Масив 8-розрядних символів фіксованого розміру. Синтаксис визначення : char[(n)], де n - число символів від 1 до 8000. Якщо n не задається у визначенні даних або в інструкції оголошення змінної, довжина за умовчанням дорівнює 1. Якщо при використанні функцій CAST і CONVERT n не задається, довжина за умовчанням дорівнює 30. Синонімом за стандартом ISO для типу char являється character.
varchar Аналогічний char, але при зберіганні рядків пам'яті відводиться по довжині рядка, а не завжди n байт, але не більше n. Синтаксис визначення : varchar[(n)], де n - число символів від 1 до 8000. Якщо n не задається у визначенні даних або в інструкції оголошення змінної, довжина за умовчанням дорівнює 1. Якщо при використанні функцій CAST і CONVERT n не задається, довжина за умовчанням дорівнює 30. Синонімами за стандартом ISO для типу varchar являються типи char varying або character varying.
text Масив 8-розрядних символів розміром до 2 Гб.
nchar Масив 16-розрядних символів фіксованого розміру. Символи зберігаються в кодуванні UNICODE UCS - 2. Синтаксис визначення : nchar[(n)], де n - число символів від 1 до 4000. Якщо n не задається у визначенні даних або в інструкції оголошення змінної, довжина за умовчанням дорівнює 1. Якщо при використанні функцій CAST і CONVERT n не задається, довжина за умовчанням дорівнює 30. Синонімами за стандартом ISO для типу nchar являються типи national char і national character.
nvarchar Аналогічний nchar за винятком того, що при зберіганні рядків пам'яті відводиться по довжині рядка, а не завжди n байт, але не більше n. Синтаксис визначення : nvarchar[(n)], де n - число символів від 1 до 4000. Якщо n не задається у визначенні даних або в інструкції оголошення змінної, довжина за умовчанням дорівнює 1. Якщо при використанні функцій CAST і CONVERT n не задається, довжина за умовчанням дорівнює 30. Синонімами за стандартом ISO для типу nvarchar являються типи national char varying і national character varying.
Ntext Масив 16-иразрядных символів розміром до 2 Гб. Символи зберігаються в кодуванні UNICODE UCS - 2. Синонімом за стандартом ISO для типу ntext являється national text.

 

Приклад 7.13. Значення за умовчанням n дорівнює 1 для типів даних char і varchar, якщо вони використовуються в оголошенні змінної :

DECLARE @myVariable AS varchar

DECLARE @myNextVariable AS char

SET @myVariable = 'abc'

SET @myNextVariable = 'abc'

-- -- Запит поверне 1 як значень функції DATALENGTH

SELECT DATALENGTH(@myVariable), DATALENGTH(@myNextVariable);

GO

Приклад 7.14. Значення за умовчанням n дорівнює 30, якщо типи даних char або varchar використовуються з функціями CAST і CONVERT :

DECLARE @myVariable AS varchar(40)

SET @myVariable = 'This string is longer than thirty characters'

SELECT CAST(@myVariable AS varchar)

SELECT DATALENGTH(CAST(@myVariable AS varchar))

AS 'VarcharDefaultLength';

SELECT CONVERT(char, @myVariable)

SELECT DATALENGTH(CONVERT(char, @myVariable))

AS 'VarcharDefaultLength';

Таблиця 7.6 - Двійкові дані в Transact - SQL

Назва Опис
Binary Масив байтів фіксованого розміру, що займає в пам'яті n +4 байт. Синтаксис визначення : binary[(n)], де n - число байтів від 1 до 8000. n за умовчанням дорівнює 30.
varbinary Масив байтів змінного розміру, що займає в пам'яті число введених байт плюс ще 4 байти, але не більше n +4.Синтаксис визначення : binary[(n)], де n - число байтів від 1 до 8000. Може набувати значень завдовжки 0 байт (не звертаючись в null).
Image Масив двійкових даних розміром до 2 Гб.

 

Таблиця 7.7 - Типи дати і часу в Transact - SQL

Назва Опис
datetime Зберігає дату і час, займає 8 байт пам'яті, де перші 4 байти зберігають число днів до або після початкової дати (1 січня 1900), а що залишилися 4 байти - число мілісекунд від півночі. Доступний діапазон дат від 1 січня 1753 року до 31 грудня 9999 року з точністю до 1/3 сантисекунды (0,003333 секунд).
smalldatetime Зберігає дату в діапазоні від 1 січня 1900 року до 6 червня 2079 року з точністю до хвилини і займає 4 байти пам'яті, де перші 2 байти зберігають число днів після початкової дати, а що залишилися 2 байти - число хвилин від півночі.
timestamp Спеціальний тип даних, призначений для зберігання часу оновлення запису. Зараз тип еквівалентний datatime або binary(чи varbinary(8), якщо допустимий null). Може використовуватися як тип колонки таблиці (атрибуту відношення), причому така колонка має бути єдиною і не мати спеціальної назви. Значення атрибуту оновлюється поточним часом при кожній операції вставки або оновлення для запису (кортежу).

 

Приклад 7.15. У інструкціях CREATE TABLE або ALTER TABLE не обов'язково вказувати ім'я стовпця з типом даних timestamp :

CREATE TABLE ExampleTable (PriKey int PRIMARY KEY, timestamp)

Типи даних ntext, text і image в майбутній версії Microsoft SQL Server будуть видалені. Слід уникати їх використання при розробці нових застосувань і запланувати зміну додатків, в яких ці типи зараз використовуються. Замість цих типів даних слід використовувати типи nvarchar, varchar і varbinary.

Таблиця 7.8 - Інші типи даних в Transact - SQL

Назва Опис
uniqueidentifier 128-иразрядное ціле, що задається у вигляді "xxxxxxxx, - xxxx - xxxx - xxxx - xxxxxxxxxxxx", де кожен символ "x" означає шістнадцятиричну цифру (0 - F). Те ж, що і GUID (global unique identifier - глобальний унікальний ідентифікатор).
sql - variant Універсальний тип, що дозволяє зберігати значення усіх типів, окрім text, ntext, text, image, timestamp і самого sql - variant. Зручний для використання в різних визначених користувачем функціях і процедурах, що зберігаються. Може займати пам'яті до 8016 байт. Перед виконанням операцій над змінною типу має бути приведений до якого-небудь базового типу. Може бути індексований, проте індексуються лише перші 900 байт. Не повністю підтримується Microsoft OLE DB Provider for ODBC (MSDASQL).
cursor Спеціальний тип даних, для організації відрядкового доступу до таблиць з процедур, що зберігаються, і ін. Не може бути типом колонки таблиці (атрибуту відношення).
table Тип, що дозволяє в змінній зберігати таблицю (відношення). Призначений для використання в процедурах, що зберігаються, для запису проміжних результатів обробки. Не може бути типом колонки таблиці (атрибуту відношення
xml Тип даних, в якому зберігаються XML -данные. Можна зберігати екземпляри xml в стовпці або в змінній типу xml. Синтаксис визначення : xml([CONTENT|DOCUMENT]xml_schema_collection), де CONTENT - вказує, що екземпляр xml має бути коректним XML -фрагментом. XML -данные можуть містити декілька (0 або більше) елементів верхнього рівня. Текстові вузли дозволені на верхньому рівні. Ця поведінка встановлена за умовчанням. DOCUMENT - вказує, що екземпляр xml має бути коректним XML -документом. XML -данные повинні містити тільки один кореневий елемент. Текстові вузли на верхньому рівні заборонені. xml_schema_collection - ім'я колекції XML -схем. Щоб створити стовпець, що типізується, або змінну xml, можна додатково вказати ім'я колекції XML -схем.

Приклад 7.16. Використання типу даних xml

USE AdventureWorks;

GO

DECLARE @y xml (Sales.IndividualSurveySchemaCollection)

SET @y = (SELECT TOP 1 Demographics FROM Sales.Individual);

SELECT @y;

GO