- •СОДЕРЖАНИЕ
- •1.1. Эволюция технологии программирования
- •1.2. Сущность технологии объектно-ориентированного программирования
- •1.3. Использование объектных моделей при организации удаленных соединений
- •2.1. Классификация объектов БД
- •2.2. Свойства и особенности элементов языка
- •2.3. Создание и удаление баз данных
- •2.4. Создание и модификация таблиц баз данных
- •ЛЕКЦИЯ 3.
- •РАБОТА С ДАННЫМИ В ЯЗЫКЕ TRANSACT-SQL
- •3.2. Создание
- •3.3. Команды манипуляции данными
- •4.1. Стандарты синтаксиса Transact-SQL
- •4.3. Курсоры
- •5.1. Разграничение прав доступа
- •5.3. Пользователи
- •5.6. Командные манипуляции с БД
- •5.7. Связанные и удаленные серверы
- •СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ
- •ЛАБОРАТОРНАЯ РАБОТА № 3. ГЕНЕРИРОВАНИЕ ОТЧЕТОВ
- •ЛАБОРАТОРНАЯ РАБОТА № 4. УДАЛЕННОЕ СОЕДИНЕНИЕ С БД INTERBASE НА ОСНОВЕ BDE
- •ЛАБОРАТОРНАЯ РАБОТА № 5. РАБОТА С КОМПОНЕНТАМИ MICROSOFT SQL SERVER
- •САМОСТОЯТЕЛЬНАЯ РАБОТА:
- •ЛАБОРАТОРНАЯ РАБОТА № 6. КОМАНДЫ СОЗДАНИЯ, МОДИФИКАЦИИ И УДАЛЕНИЯ ТАБЛИЦ
ЛЕКЦИЯ 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», серое - автоматически.