Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вся метода 3 (2).doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
1.15 Mб
Скачать

Обработка оператора select

Базовый процесс исполнения основной массы операторов Transact-SQL можно проиллюстрировать на примере этапов обработки одиночного оператора SELECT, который ссылается только на локальные таблицы (и не использует представления или удаленные базы данных).

  1. Синтаксический анализатор сканирует оператор SELECT и разбивает его на логические единицы, такие, как ключевые слова, выражения, операторы и идентификаторы.

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

  3. Оптимизатор запросов анализирует все варианты обращения к исходным таблицам и выбирает тот, который позволит быстрее всего получить результат с наименьшей затратой ресурсов. Дерево запроса обновляется точным описанием набора шагов. Конечная, оптимизированная версия дерева запросов получает название «план исполнения».

  4. Реляционный механизм приступает к реализации плана исполнения. При выполнении шагов, требующих данные из таблиц базы, реляционный механизм с помощью OLE DB запрашивает у механизма хранения передачу данных из наборов строк, запрошенных у реляционного механизма.

  5. Реляционный механизм обрабатывает данные, которые вернул механизм хранения, преобразует их в формат, определенный для результирующего набора, и возвращает результаты клиенту.

Обработка других операторов

Основные этапы обработки оператора SELECT верны и для других операторов SQL — INSERT, UPDATE и DELETE. Операторы UPDATE и DELETE определяют целевые набо­ры строк, предназначенные для модификации или удаления. Процесс идентификации этих строк аналогичен процессу идентификации исходных строк для формирования результи­рующего набора оператора SELECT. И UPDATE, и INSERT могут содержать встроенные операторы SELECT, которые предоставляют данные для модификации или добавления. Даже операторы DDL, например CREATE PROCEDURE или ALTER TABLE, в ко­нечном счете представлены наборами реляционных операций над таблицами системного каталога и иногда (в случае операторов ALTER TABLE и ADD COLUMN) над таблицами данных.

Пакеты

Пакет — это группа из одного или нескольких операторов Transact-SQL, которые прило­жение одновременно посылает на SQL Server для исполнения. SQL Server компилирует операторы пакета в единую исполнимую единицу (план исполнения). После этого по оче­реди выполняются операторы этого плана.

Ошибка при компиляции, например синтаксическая, останавливает процесс компи­ляции плана исполнения. В этом случае ни один из операторов пакета исполнен не будет. У ошибки периода выполнения, например арифметического переполнения или наруше­ния ограничения, возможно одно из следующих последствий:

  • большинство ошибок периода выполнения останавливают исполнение текущего и последующих операторов пакета;

  • некоторые ошибки периода выполнения, например нарушения ограничений, останавливают исполнение лишь текущего оператора. При этом все остальные операторы пакета будут исполнены.

Операторы, исполненные до оператора, вызвавшего ошибку периода выполнения, не испытывают на себе влияния этой ошибки. Единственное исключение: если пакет явля­ется транзакцией, то при возникновении ошибки транзакция откатывается. В этом случае происходит отмена всех незафиксированных модификаций, сделанных до возникновения ошибки периода выполнения.

Например, пакет состоит из 10 операторов. Если в пятом операторе допущена синтаксическая ошибка, ни один из операторов пакета не будет выполнен. Если пакет уже ском­пилирован и при исполнении второго оператора происходит сбой, то результат первого оператора остается без изменений (поскольку он уже получен).

При обработке пакетов действуют следующие правила:

  • операторы CREATE DEFAULT, CREATE PROCEDURE, CREATE RULE, CREATE TRIGGER и CREATE VIEW не могут соседствовать в пакетах с другими операторами. Пакет должен начинаться с оператора CREATE. Все следующие за ним операторы будут интерпретированы как часть определения, созданного первым оператором CREATE;

  • в пределах одного и того же пакета нельзя модифицировать таблицу и обращаться кновым столбцам;

  • если оператор EXECUTE — первый оператор пакета, ключевое слово EXECUTE не требуется. Но оно необходимо, когда оператор EXECUTE не является первым оператором пакета.