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