В лекции рассматриваются основные типы данных, используемые в MS SQL Server 2008, правила объявления переменных, а также алгоритмические конструкции, присущие всем языкам программирования, и стандартные функции для обработки данных.
Цель: дать представление об основных возможностях языка Transact-SQL.
В 1970-х годах был разработан специальный язык SEQUEL (Structured English Query Language), который позднее был переименован в SQL. В 1986 году комитетом ANSI (American National Standards Institute) был принят первый стандарт языка. Последним принятым стандартом является ISO SQL:2008.
Язык SQL разрабатывался как непроцедурный язык, который будет доступен обычным пользователям, а не только программистам. Однако со временем язык становился все сложнее и сейчас предназначен в большей степени для программистов. Несмотря на существование стандартов языка SQL, в каждой СУБД используется свое расширение этого языка. Основной причиной использования расширений SQL является потребность применять SQL не только как язык запросов, но и как язык программирования, для этого, как правило, вводятся так называемые хранимые процедуры. СУБД Microsoft SQL Server использует свое расширение языка, которое называется Transact-SQL и включает в себя следующее:
· управляющие конструкции;
· локальные переменные;
· дополнительные функции (математические, строковые и другие);
· поддержка аутентификации Windows.
MS SQL Server поддерживает все основные простые типы данных, используемые в современных языках программирования. В версии MS SQL Server 2008 были добавлены несколько новых типов, а некоторые перестали рекомендоваться к использованию.
Типы данных в MS SQL Server можно разделить на семь категорий.
1. Целые числа:
· Bit (1 байт). На самом деле первый бит в таблице будет занимать один байт, однако следующие семь бит в этой таблице будут храниться в том же байте.
· Bigint (8 байт). 64-разрядное целое число, позволяет хранить числа от –263 до +263–1.
· Int (4 байта). Диапазон значений от –2 147 483 648 до +2 147 483 647.
· SmallInt (2 байта). Диапазон значений от –32768 до +32767.
· TinyInt (1 байт). Диапазон значений от 0 до 255.
2. Числа с фиксированной запятой:
· Decimal или Numeric. Диапазон значений от –1038–1 до +1038–1.
· Money (8 байт). Денежный формат, диапазон значений от –263 до +263 с четырьмя знаками после запятой.
· SmallMoney (4 байта). Денежный формат, диапазон значений от –214748,3648 до +214748,3647.
3. Числа с плавающей запятой:
· Float. Диапазон значений от –1,79E +308 до +1,79E +308.
4. Дата и время:
· DateTime (8 байт). Диапазон значений от 1 января 1753 года до 31 декабря 9999 года с точностью до трех сотых секунды.
· DateTime2 (6-8 байт). Новый тип данных, поддерживает точность до 0,1 мс.
· SmallDateTime (4 байта). Диапазон значений от 1 января 1900 года до 6 июня 2079 года с точностью одна минута.
· DateTimeOffset (8-10 байт). Аналогичен типу DateTime, но хранит ещё сдвиг относительно времени UTC[1].
· Date (3 байта). Хранит только дату. Диапазон значений от 1 января 0001 года до 31 декабря 9999 года.
· Time (3-5 байт). Хранит только время с точностью до 0,1 мс.
5. Символьные строки:
· Char. Строка фиксированной длины. Максимальная длина строки 8000 символов.
· VarChar. Строка переменной длины. Максимальная длина строки 8000, но при использовании ключевого слова «max» может хранить до 231 байт.
· Text. Применялся для хранения больших строк, сейчас рекомендуется использование varchar(max) вместо text. Оставлен для обратной совместимости.
· Nchar. Строка фиксированной длины в Юникоде. Максимальная длина строки 4000 символов.
· NvarChar. Строка переменной длины в Юникоде. Максимальная длина строки 4000 символов, но при использовании ключевого слова «max» может хранить до 231 байт.
· Ntext. Аналогичен типу text, но предназначен для работы с Юникод. Сейчас рекомендуется использовать nvarchar(max). Оставлен для обратной совместимости.
6. Двоичные данные:
· Binary. Позволяет хранить двоичные данные размером до 8000 байт.
· VarBinary. Тип данных переменной длины, позволяет хранить до 8000 байт, но при использовании ключевого слова «max» до 231 байт.
· Image. Использовался для хранения больших объемов данных, сейчас рекомендуется использовать varbinary(max). Оставлен для обратной совместимости.
7. Прочие типы данных:
· Table. Особый тип данных, используемый в основном для временного хранения таблиц и для передачи в качестве параметра в функции.
· HierarchyID. Используется для представления положения в иерархической структуре.
· Sql_variant. Тип данных, хранящий значения различных типов данных, поддерживаемых MS SQL Server.
· XML. Позволяет хранить XML-данные.
· Cursor(1 байт). Тип данных для переменных или выходных параметров хранимых процедур, которые содержат ссылку на курсор.
· Timestamp/ rowversion (8 байт). Это тип данных, который представляет собой автоматически сформированные уникальные двоичные числа в базе данных. Значение данного типа генерируется БД автоматически при вставке или изменении записи.
· UniqueIdentifier (16 байт). Представляет собой GUID (Special Globally Unique Identifier). Гарантируется уникальность данного значения.