Типи даних мови 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