Подробно рассмотрено использование языка 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 Оглавление |
Добавить Комментарий