Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Высокоуровневые методы программирования..pdf
Скачиваний:
8
Добавлен:
15.11.2022
Размер:
10.32 Mб
Скачать

ЛЕКЦИЯ 2. КОМАНДНЫЙ TRANSACT-SQL

Ядро СУБД Microsoft SQL Server составляет Transact-SQL, в список команд которого входят не только стандартные команды манипулирования и обработки данных, создания и модификации объектов БД, но и функции администрирова­ ния. В силу этого сам язык Transact-SQL является чрезвычайно емким и громоз­ дким. Он состоит из двух уровней: командного SQL и процедурного SQL.

Уровню командного SQL соответствуют все самостоятельно выполняю­ щиеся инструкции по обработке данных, модификации структуры БД и адми­ нистративные команды. Проще говоря, к этой категории относятся все способ­ ные выполняться самостоятельно команды SQL.

На уровне процедурного SQL находятся все структурные самостоятель­ ные и контекстно зависимые алгоритмические конструкции. Эти конструкции основываются на стандарте записи выражений в Transact-SQL. Наиболее ярки­ ми примерами процедурного SQL является хранимые процедуры и триггеры.

В некоторых случаях определить конструкцию как командную или проце­ дурную затруднительно. Все сомнения должны трактоваться в пользу процедур­ ной конструкции, так как она является более емкой и универсальной.

Все важнейшие команд Transact-SQL были соотнесены с определенны­ ми мастерами и построителями объектов Microsoft SQL Server. Это позволяет разработчику в большинстве случаев даже не задумываться над сложностью генерируемого и исполняемого SQL-кода. Однако визуальная разработка про­ екта возможна далеко не всегда. Поэтому настоятельно рекомендуется владеть основными командами Transact-SQL и не избегать ручного проектирования БД. Визуальное проектирование будет эффективным только при очень интен­ сивной разработке проекта или его повышенной сложности.

Владение ручным Transact-SQL позволит разработчику:

1.Не имея доступа к административным ресурсам сервера выполнять любые команды в рамках СУБД.

2.Осуществлять написание не только прикладных программ, использу­ ющих БД Microsoft SQL Server, но и АРМов занимающихся админи­ стрированием определенных проектов.

3.Допустить больший уровень независимости от администраторов, отвечающих за техническое состояние сетей и безопасность.

2.1.Классификация объектов БД

ВMicrosoft SQL Server все объекты можно разделить на следующие группы:

-таблицы (tables) - двумерные матрицы, в которых хранятся собственно данные (это единственный объект базы данных, способный хранить данные);

-хранимые процедуры (stored procedures) - наборы команд Transact-SQL, сохраненные под определенными именами; пользователи работают

стаким набором как с единым целым, обращаясь к нему по имени;

-триггеры (triggers) - специальные хранимые процедуры, вызываемые при изменении данных в таблице;

-представления (views) - виртуальные таблицы, позволяющие работать

срезультатом выборки как с таблицей;

-индексы (indexes) - дополнительные структуры, призванные повысить скорость доступа к данным;

-пользовательские типы данных (user-defined data types) - типы данных,

создаваемые пользователем на основе типов данных, встроенных

в SQL Server;

-функции пользователя (user-defined functions) - функции, созданные пользователем (возвращают одно значение);

-ключи (keys) - один из видов ограничений целостности, обеспечи­ вающий ссылочную целостность данных;

-правила (rules) - объекты базы данных, позволяющие контролировать логическую целостность данных. Правило обычно связывается со столбцом таблицы или пользовательским типом данных;

- ограничения целостности (constraints) - эти объекты, как

иправила, призваны обеспечивать логическую целостность данных. Не могут существовать отдельно от таблиц. Ограничения целостности в Microsoft SQL Server 2000 пришли на смену правилам в SQL Server 7.0;

-умолчания (defaults) - самостоятельные объекты базы данных, которые, так же как и правила, могут связываться со столбцами таблиц

ипользовательскими типами данных. Оставлены в SQL Server 2000 для обеспечения совместимости с предыдущими версиями. Начиная с SQL Server 7.0 значения по умолчанию могут быть указаны непосредственно в структуре таблицы или пользовательского типа данных.

2.2.Свойства и особенности элементов языка

Воснове языка лежат базовые элементы:

-Идентификаторы (identifiers). Идентификаторы используются для обращения к конкретному объекту, такому как переменная, таблица, представление, столбец, индекс и т.п. Таким образом, идентификатор является просто именем объекта.

-Комментарии (comments). Комментарии являются частями текста, вставленного в команды Transact-SQL или сценария для пояснения его смысла. Комментарии не обрабатываются TransactSQL и предназначены лишь для пользователя. В SQL Server 2000 появился еще и блочный комментарий. В обычном комментарии

(строчном) следует использовать два символа минуса (— ). При работе с блочными комментариями разработчик ставит «/*» и «*/». Блочные комментарии, в отличие от строковых, могут использоваться внутри строки и включать множество строк.

-Зарезервированные ключевые слова (reserved keywords). Это термины, использующиеся для управления работой SQL Server, контроля хода выполнения алгоритмов или других задач. Они не зависят от регистра и не могут быть идентификаторами.

Остальные элементы языка относятся к категориям выражений.

2.2.1. Выражения

Выражения (expressions) в SQL Server представляют собой комбина­ цию идентификаторов, функций, знаков логических и арифметических опе­ раций, констант и других объектов. Выражение может быть использовано в качестве аргумента в командах, хранимых процедурах или запросах. Вы­ ражение состоит из операндов (данных и операторов) и знаков операций, производимых над операндами.

Выражения разделяются на следующие категории:

-

Константы. Это постоянные величины. Примеры констант: 313,

 

3 .14,‘Ок!’

-

Переменные. Переменная — это именованная область памяти ранее

 

определенного объема, в которой хранятся данные.

-

Имена столбцов. В качестве операнда может выступать столбец

 

таблицы. Такой подход часто используется при обработке данных

в таблице, удовлетворяющих определенному критерию.

-Функции. Это именованные программы, выполняющие обработку данных и возвращающие определенный результат. Функции могут иметь входные параметры или просто возвращать значение (например, функция GETDATE возвращает текущее значение времени).

-Подзапросы. В качестве выражения можно указать подзапрос, который подготовит набор данных.

-Конструкции CASE, NULLIF и COALESCE. Эти конструкции позволяют использовать логическое условие для определения возвращаемого результата.

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

Select [Всего продали] from [Продажа]

Длина стандартных и ограниченных идентификаторов не может превы­ шать 128 символов.

float

Используется для хранения дробных чисел с приблизительной

 

точностью

char(n)

Хранит строку фиксированной длины

image

Двоичные данные длиной до 2 Гбайт. Пространство для хранения

 

данных этого типа отводится страницами, размер которых

 

составляет 8 Кбайт (в Microsoft SQL Server 7.0 - 2 Кбайта)

int

Занимает 4 байта и может хранить целые числа в диапазоне от -2 31

 

до 231-1

money

Используется для хранения денежных данных в большом диапазоне.

 

Обеспечивает точность до 4 знаков после запятой и занимает 8 байт

nchar(n)

Строковой тип данных фиксированной длины с поддержкой Unicode

 

длиной до 8000 символов

ntext

Строковой тип данных с поддержкой Unicode длиной до 1

 

Гбайта. Пространство для хранения данных этого типа отводится

 

страницами, размер которых составляет 8 Кбайт

nvarchar(n)

Строковой тип данных переменной длины с поддержкой Unicode

 

длиной до 8000 символов

numeric

Является аналогом типа данных decimal

real

Является аналогом float(24)

smalldatetime

Тип данных для хранения даты и времени с нормальной точностью

 

в диапазоне с 1 января 1900 года и до 6 июня 2079 года, занимающий

 

4 байта

smallint

Небольшое целое. Занимает 2 байта и может хранить целые числа

 

в диапазоне от - 2 15 до 215-1 (от -32 768 до 32 767)

smallmoney

Используется для хранения денежных данных в нормальном

 

диапазоне. Обеспечивает точность до 4 знаков после запятой

 

и занимает 4 байта

text

Строковой тип данных без поддержки Unicode длиной до 2 Гбайт.

 

Пространство для хранения данных этого типа отводится

 

страницами, размер которых составляет 8 Кбайт

tinyint

Маленькое целое. Занимает 1 байт и может хранить целые числа

 

в диапазоне от 0 до 255

varbinary(n)

Двоичные данные переменной длины до 8000 байт

varchar(n)

Строковой тип данных переменной длины без поддержки Unicode

uniqueidentifier

Используется для хранения глобальных уникальных

 

идентификаторов (Global Unique Identifier, GUID)

Все типы данных делятся на:

-бинарные - binary(n), varbinary(n), image;

-символьные - char(n), varchar(n), nchar(n), nvarchar(n);

-текстовые —text, ntext;

-целочисленные - int или integer, smallint, tinyint;

-нецелочисленные - decimal(p,s), numeric(p,s), fioat(n), real;

-временные datetime, smalldatetime;

-денежные - money, smallmoney;

-специальные - bit, uniqueidentifer и др.

Преобразование типов данных обычно происходит неявно. Например, когда сравниваются два числовых значения разных типов (int и smallint)5 Но в ряде случаев следует использовать универсальные функции приведе­ ния или преобразования типов.

Г"

select cast(10.23 as int) " " 1

CAST (выражение AS имя.тапа)

select convert(char(8), fio)

CONVERT (тип_данных(длина), выражение [, стиль])

Для детального ознакомления с аргументами и форматами функций сле­ дует обратиться к справочной литературе.

2.2.2. Преобразования данных

Работа с данными типа «дата/время» производится через номера стилей по шаблону:

CONVERT (тип_данных(длина), выражение [.стиль]) CONVERT (char(12), getdate(),3) = dd/mm/yy CONVERT (char(12), getdate(),104) = dd.mm.yyyy

SELECT CAST(ROUND(ytd_sales/price, 0) AS int) AS ‘Copies’

Год

Год(уууу)

Standard

Input/Output**

 

(yy)

 

 

 

 

-

0 or 100 (*)

Default

mon dd yyyy hh:miAM (or PM)

 

1

101

USA

mm/dd/yy

 

2

102

ANSI

yy.mm.dd

 

3

103

British/French

dd/mm/yy

 

4

104

German

dd.mm.yy

 

5

105

Italian

dd-mm-yy

 

6

106

dd mon yy

 

 

 

 

 

7

107

-

Mon dd, yy

'

 

 

 

 

8

108

hh:mm:ss

 

 

 

 

 

9 or 109 (*)

Default +

mon dd yyyy hh:mi:ss:mmmAM (or PM)

 

 

 

 

 

milliseconds

1

 

Год

Год (уууу)

Standard

Input/Output**

(уу)

 

 

 

10

110

USA

mm-dd-yy

11

111

JAPAN

yy/mm/dd

12

112

ISO

yymmdd

-

13 or 113 (*)

Europe default +

dd mon yyyy hh:mm:ss:mmm(24h)

 

 

milliseconds

 

14

114

 

hh:mi:ss:mmm(24h)

-

20 or 120 (*)

ODBC canonical

yyyy-mm-dd hh:mi:ss(24h)

-

21 or 121 (*)

ODBC canonical

yyyy-mm-dd hh:mi:ss.mmm(24h)

 

 

(with milliseconds)

 

-

-

-

126(***)

ISO8601

yyyy-mm-dd Thh:mm:ss:mmm(no spaces)

130*

Kuwaiti

dd mon yyyy hh:mi:ss:mmmAM

131*

Kuwaiti

dd/mm/yy hh:mi:ss:mmmAM

То:

From: binary_______

varb in ay ____

char_________

varchar______

nchar________

nvarchar datetime smalldatetime decimal

numeric

float

real____________

bigint__________

int(lNT4)_______

sm alllint(INT2) tinyint(IN TI) money_________

smallmoney

M________

Timestamp______

iiniqueidentiflen. im age__________

ntext text

scfjnriant

 

 

 

 

 

 

 

 

 

f t

 

 

0)

 

 

 

 

.

 

я

 

 

 

 

&

E

 

 

 

 

 

 

 

 

 

 

fr 5

 

 

 

 

 

 

 

 

 

 

s

 

 

 

to

£ E ' -o 9 *c

 

®i-E

§

i s

£

 

 

 

я а W

 

 

 

to92

i tQ

 

-

о

 

i f

 

з

 

 

S

(в f

w . s = E « _

■£ 5S '5 c 5 £

 

 

Й

!

J

'D

E

5

1 1

 

 

i ig 1 1 1 -5

i;$

i s i . i . i g

а)

з

о

 

 

 

 

 

-

w

E

 

 

 

I E

 

О

О О О О О О О

0 . 0 0 0 0 0 0 О О О О о О О О о о

о 'о о о о о

О 0 .6 .0 б О б О б о б о б о о б о

• •

о о 'о о о о о о о о о б

о,# •

о • б о б б б

• • :0 о 6 о 'о б О б б О б О б • • б • 0 0 6 6 6

• • о о

6 6 о 6 о б о о б о о • • б •

о б б б б

• • О О О

о о о о б б о б О б • • б •

о о о б б

• • О О О О О

* • • • • • • • • Ф • •

б б о б о

• • О О О о о

Ф Ф Ф Ф Ф~ Ф Ф • Ф • Ф Ф б б 6 о о

о 6 о о 6 о 6 о * * 0 0 0 0 6 6 0 0 0 0 0 0 о о б

О 6 0 0 0

ООО * * О О О О б о 0 0 0 0

0 6 0 О б

о

о о о о о

о

о ОО О О б б О б О б О б о о о о

б

О О О О' о

о

о О ОО б б О О О О О б б О б о б

0 0 О О О О О'О б

о б о б о б б б б о о о б б б

о о о о о о о о б О О О б б О б О о о о о о о о

6 6 6 6 0 0 0 0 о б о б о б 6 6 6- 6 6 6 6 6 6 , 6

б б О О О О О О о о о о о б о о б о о о о б б б

О б..ф •

о о б о б о б б О О О О О о б о о б

б б • •

о о б О б б О б О О О О б О б 6 О б

б б б о б о о о О б О О О О б о б о б о о о о о

О О О

О О О О О О О О б б о б О О О б О О О О б

о о б

б о о

о о о б о о б о б о б о б б б б о б

О 0

0

б б

б

б

о

о б о о б о б б о о б б о о б о

б о

• 6

о

о

б

б б б б О б О О О О О О О б о о

о p o p # • о о о о о б о б о о о о о б о б о о

ф ф ф ф ф ф ф ф ф ф ф б ф 6 6 б

Белое - преобразование невозможно, звездочка - рекомендуется «cast»,

так как возможна потеря точности, черное - рекомендуется «convert», серое - автоматически.