Transact-SQL В подлиннике

Аннотация

Подробно рассмотрено использование языка Transact-SQL для администрирования и манипуляции данными СУБД Microsoft SQL Server. Материал сопровождается большим количеством практических примеров, написанных автором. Уделено внимание вопросам применения Transact-SQL при совместном использовании 1С и Microsoft SQL Server. На прилагаемом к книге компактдиске размещены примеры запросов, тестовая база данных, а также дополнительная документация и статьи автора, посвященные базам данных.

Купить книгу онлайн

Скачать исходные коды

Читать онлайн

Введение

Уже долгое время язык запросов SQL (Structured Query Language, структурированный язык запросов) является стандартом доступа к базам данных. Не имеет значения, какой язык программирования вы используете, я больше чем уверен, что доступ к данным на сервере баз данных происходит с помощью запросов SQL. Исключением могут быть только локальные таблицы типа DBF или Paradox. В них доступ к данным может происходить благодаря драйверу через прямой доступ. Но и в этом случае, драйвер может поддерживать запросы, с помощью которых возможности по работе с данными увеличиваются в разы.

При работе с клиент-серверными или n-уровневыми системами, доступ обязательно происходит именно через SQL запросы. Более удобного и мощного средства пока не придумали. Даже там, где вы думаете, что доступ идет напрямую, используется SQL, просто среда разработки прячет от нас запросы.

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

Язык запросов стандартизирован еще в 1992-м году. За это время его возможности немного устарели, но не потеряли своей актуальности. В конце 90-х годов предпринимались попытки принять обновленный стандарт, но война между различными производителями баз данных не позволили найти компромисса. В связи с этим SQL получил два вида расширений Transact-SQL или T-SQL (поддерживается Microsoft) и PL\SQL (яркий представитель - Oracle). Каждый из этих производителей максимально придерживается стандарта SQL 92-го года, и все запросы на этом языке будут выполняться корректно. Но для предоставления пользователю новых возможностей добавлены новые команды, которые объединены под именами Transact-SQL и PL\SQL и поддерживаются на разных базах данных.

Рассмотреть абсолютно все команды и возможности всех этих стандартов невозможно. Поэтому мы ограничимся стандартом 92-го года и расширением Transact-SQL, потому что сервера от MS получили в нашей стране достаточно широкое распространение и продолжают завоевывать сердца разработчиков. Рассматривать всю спецификацию SQL также не имеет смысла, потому что большая ее часть относиться к разработчикам серверов баз данных (какие должны быть поля, их типы, размерность и т.д.). Мы же будем рассматривать стандарт с точки зрения программистов конечных приложений, которые уже использую SQL, а не реализуют его в своих программах.

Для кого эта книга

Вполне логичный вопрос – кому будет полезна эта книга? Конечно же, это администраторы и программисты. С программистами все ясно, они должны знать язык, с помощью которого можно получать данные от сервера. Но зачем это нужно администратору.

Начинающие администраторы для управления сервером SQL очень часто используют специальную утилиту Enterprise Manager, которая предоставляет визуальный интерфейс и удобство в администрировании сервером. Визуальность – это хорошо, но сценарии лучше. Я сам в этом убедился, когда нужно было тиражировать схожие настройки базы данных на несколько серверов. Сначала я копировал базу с помощью резервного копирования и восстановления на новый сервер, а затем чистил новую базу данных от ненужных данных. Это долгий и не очень удобный процесс.

Чтобы ускорить тиражирование, я написал один сценарий, который последовательно выполнял все необходимые действия – создание базы данных, процедур, функций и индексов. Этот сценарий выполнялся намного быстрее, потому что не надо было копировать избыточные данные и чистить таблицы. После этого, я сохраняю на диске все сценарии создания базы данных и изменения ее настроек. Это позволяет быстро создать новую базу данных.

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


Содержимое

Оглавление Предисловие 1
Благодарности 2
Для кого эта книга 3
Введение в SQL 4
Работа с запросами 7
Именование 7
CyD SQL Factory 9
Query Analyzer 12

Глава 1. Управление базой данных

17
1.1. Создание и удаление базы данных 18
1.1.1. Файловые группы 28
1.1.2. Подключение базы данных 33
1.1.3. Сопоставление 34
1.2. Создание таблиц 35
1.2.1. Оператор CREATE TABLE 39
1.2.2. Автоматическое увеличение 43
1.2.3. Значения по умолчанию 47
1.2.4. Ограничения 49
1.2.5. Первичный ключ 58
1.2.6. Внешний ключ 60
1.2.7. Индексы 69
1.2.8. Опции индексов 80
1.2.9. Вычисляемые поля 82
1.2.10. Создание временных таблиц 85
1.2.11. GUID-поля 87
1.3. Редактирование параметров базы данных 88
1.3.1. Изменение размера файла 89
1.3.2. Добавление и удаление файла 93
1.3.3. Добавление и удаление файловых групп 94
1.3.4. Переименование базы данных 95
1.3.5. Изменение свойств базы данных 95
1.4. Редактирование таблиц 98
1.4.1. Добавление новых полей 100
1.4.2. Удаление полей 101
1.4.3. Изменение ограничений 101
1.4.4. Изменение поля 103
1.5. Обеспечение целостности данных 104
1.5.1. Ограничение DEFAULT 107
1.5.2. Ограничение CHECK 108
1.5.3. Ключи 109
1.5.4. Уникальность 110
1.5.5. Отключение ограничений 110
1.5.6. Правила и объекты значений по умолчанию 111
1.6. Именование 114
1.7. Резюме 115

Глава 2. Работа с данными

121
2.1. Оператор SELECT 122
2.2. Выборка данных 124
2.2.1. Полный путь 125
2.2.2. Ограничение вывода строк 127
2.2.3. Псевдонимы полей 128
2.3. Ограничение выборки 129
2.4. Булевы операторы 133
2.5. Улучшенный поиск 136
2.6. Вставка в таблицу 139
2.7. Шаблоны строк 140
2.8. Работа с несколькими таблицами 142
2.9. Объединение в стиле Microsoft 149
2.10. Простейшие расчеты 151
2.11. Сортировка 155
2.12. Группировка 156
2.13. Объединение запросов 160
2.14. Подзапросы 162
2.15. Операторы работы с подзапросами 169
2.15.1. Оператор EXISTS 169
2.15.2. Операторы ANY, SOME и ALL 170
2.16. Добавление записей 172
2.17. Изменение данных 178
2.18. Удаление данных 183
2.19. Транзакции 187
2.20. Переменные 196
2.21. Конвертирование типов 200
2.22. Работа с датами и временем 203
2.22.1. Преобразование дат 203
2.22.2. Функции для работы с датами 205
2.22.3. Замечания по работе с датами 209
2.23. Ход выполнения запроса 210
2.23.1. Условный оператор IF 210
2.23.2. Условный оператор CASE 214
2.23.3. Оператор цикла WHILE 216
2.23.4. Прерывание работы сценария 218
2.23.5. Подмена 219
2.23.6. Ожидание 220
2.24. Работа с GUID-полями 221
2.25. Функции работы со строками 227
2.25.1. Функция SUBSTRING 227
2.25.2. Функция LEFT 228
2.25.3. Функция LEN 229
2.25.4. Функция LOWER 229
2.25.5. Функция UPPER 229
2.25.6. Функции LTRIM и RTRIM 230
2.25.7. Функция PATINDEX 231
2.25.8. Функция REPLACE 231
2.25.9. Функция REPLICATE 232
2.25.10. Функция REVERSE 233
2.25.11. Функция SPACE 234
2.25.12. Функция STR 234
2.25.13. Функция STUFF 235
2.26. Математические функции 236
2.26.1. Знаки 236
2.26.2. Округление 237
2.26.3. Сложная математика 238
2.26.4. Случайное значение 239
2.26.5. Тригонометрические функции 239
2.26.6. Степень 240
2.27. Связь "многие-ко-многим" 241

Глава 3. Программирование на сервере

245
3.1. Представления 246
3.1.1. Создание представления 246
3.1.2. Редактирование представления 252
3.1.3. Удаление представления 253
3.1.4. Изменение содержимого представления 253
3.1.5. Удаление строк из представления 254
3.1.6. Опции представления 254
3.2. Хранимые процедуры 255
3.2.1. Создание хранимых процедур 257
3.2.2. Выполнение процедур 259
3.2.3. Удаление процедур 259
3.2.4. Использование параметров 260
3.2.5. Преимущества хранимых процедур 261
3.2.6. Практика создания и использования процедур 261
3.2.7. Изменение процедур 264
3.2.8. Использование процедур при вставке данных 266
3.2.9. Опции 266
3.3. Хранимые функции 267
3.3.1. Создание функции 268
3.3.2. Скалярные функции 269
3.3.3. Использование функций 271
3.3.4. Функция, возвращающая таблицу 272
3.3.5. Многооператорная функция, возвращающая таблицу 274
3.3.6. Опции функций 276
3.3.7. Изменение функций 277
3.3.8. Удаление функций 279
3.4. Триггеры 279
3.4.1. Создание триггера 280
3.4.2. Откат изменений в триггере 281
3.4.3. Изменение триггера 283
3.4.4. Удаление триггера 285
3.4.5. Как работают триггеры? 285
3.4.6. Триггер INSTEAD OF 290
3.4.7. Дополнительные сведения о триггерах 293
3.4.8. Практика использования триггеров 295
3.5. SQL Server Agent 298
3.5.1. Добавление задания 300
3.5.2. Управление операторами 302
3.5.3. Добавление шага 306
3.5.4. Запуск задания 312
3.5.5. Информация о задании 315
3.5.6. Управление заданиями 319
3.5.7. Управление шагами 320
3.5.8. Эффективное использование заданий 322
3.6. Планировщик заданий 323
3.6.1. Добавление плана выполнения 324
3.6.2. Обновление планировщика 328
3.6.3. Удаление планировщика 329
3.6.4. Информация о планировщике 329
3.7. Оповещения 329
3.7.1. Создание сообщения 330
3.7.2. Создание оповещения 331
3.7.3. Создание уведомления 336

Глава 4. Дополнительные возможности Transact-SQL

339
4.1. Свойства сервера 339
4.1.1. Ограничение выводимых строк 340
4.1.2. Управление неявными транзакциями 341
4.1.3. Управление блокировками 342
4.1.4. Управление датой 346
4.1.5. Объединение с NULL 347
4.1.6. Запрет на подсчет строк 348
4.1.7. Закрытие курсора 348
4.1.8. План выполнения 348
4.1.9. Соответствие ANSI 349
4.2. Информация о системе 351
4.2.1. Информация о базе данных 351
4.2.2. Имя пользователя 354
4.2.3. Имя приложения 354
4.2.4. Информация об объекте 355
4.2.5. Информация о журнале транзакций 358
4.2.6. Свойство IDENTITY 359
4.2.7. Информационные процедуры 360
4.2.8. Пользовательские параметры конфигурации 363
4.3. Обработка ошибок 365
4.3.1. Глобальная переменная @@ERROR 366
4.3.2. Генерирование сообщений 367
4.3.3. Создание собственных сообщений 369
4.3.4. Резюме 370
4.4. Поддержка XML 370
4.5. Типы данных, определенные пользователем 372
4.6. Поддержка индексов 373
4.7. Работа со статистикой 380
4.8. Управление пользователями 387
4.8.1. Управление пользователями сервера 387
4.8.2. Управление пользователями базы данных 390
4.8.3. Роли 392
4.8.4. Создание и удаление ролей 394
4.8.5. Управление ролями 394
4.9. Права доступа 396
4.9.1. Разрешение доступа 396
4.9.2. Запрещение доступа 399
4.9.3. Отмена прав доступа 401
4.9.4. Информация о правах доступа 403
4.10. Резервное копирование и восстановление 405
4.10.1. Стратегия резервного копирования 406
4.10.2. Стратегия восстановления 409
4.10.3. Резервное копирование 410
4.10.4. Восстановление данных 422
4.10.5. Замечания по резервному копированию 435
4.11. Уменьшение базы данных 437
4.12. Отключение базы данных 439

Глава 5. Сложные запросы

443
5.1. Распределенные запросы 443
5.1.1. Динамическое создание подключений 444
5.1.2. Создание связанного сервера 448
5.1.3. Код на связанном сервере 452
5.2. Оптимизация запросов 453
5.2.1. Работа с планом выполнения 454
5.2.2. Отображение профиля 461
5.2.3. Генерация плана выполнения 462
5.3. Расширенные процедуры 464
5.3.1. Обращение к системе 464
5.3.2. Информация об учетной записи 466
5.3.3. Список групп 468
5.3.4. Информация о сервере 468
5.3.5. Доступ к серверу 469
5.3.6. Доступ к журналу 469
5.4. Внешнее выполнение 471
5.5. Домашняя бухгалтерия 476
5.5.1. Создание тестовой базы 476
5.5.2. Выборка данных о затратах 482
5.5.3. Простые отчеты 483
5.5.4. Многомерные отчеты 486
5.6. Типы данных TEXT и IMAGE 490
5.6.1. Чтение больших объемов данных 493
5.6.2. Обновление данных 494
5.7. Курсоры 497
5.7.1. Объявление курсора 499
5.7.2. Открытие курсора 501
5.7.3. Выборка записей из курсора 501
5.7.4. Закрытие курсора 505
5.7.5. Изменение данных в курсоре 506
5.8. Полнотекстовый поиск 509
5.8.1. Включение поиска 511
5.8.2. Создание каталога 511
5.8.3. Регистрация таблиц 512
5.8.4. Регистрация полей 513
5.8.5. Информация о каталоге 515
5.8.6. Использование поиска 517

Глава 6. Transact-SQL и 1C

523
6.1. Конфигурирование 524
6.2. Обслуживание базы данных 530
6.2.1. Настройка базы данных 530
6.2.2. Резервное копирование 531
6.2.3. Восстановление данных 534
6.2.4. Задания 536
6.3. Выборка данных 541
Заключение 545
ПРИЛОЖЕНИЯ 547
Приложение 1. Типы данных в SQL Server 2000 549
Числа 549
Числа с плавающей точкой 549
Денежные типы 550
Дата и время 550
Строки 550
Бинарные данные 551
Другие типы данных 551
Приложение 2. Описание компакт-диска 553
Предметный указатель 555
VIII Оглавление IX Оглавление

Отзывы

Добавить Комментарий

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне