Программирование >>  Реализация баз данных 

1 ... 25 26 27 [ 28 ] 29 30 31 ... 162


при работе с Server 2

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

оператора остается без изменений (поскольку он уже получен).

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

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

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

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

Команда GO

SQL Query Analyzer, а также утилитчс]! ql считают команду GO признаком конца пакета. Команда GO интерпретируется не как оператор а как сигнал для

утилит, определяющий число операторов Transact-SQL в пакете. SQL Query Analyzer и утилитм:1 и isql помещают все операторы Transact-SQL, расположенные между двумя последовательными командами GO, в строку и отправляют ее SQLExecDirect. В isql все операторы Transact-SQL, которые находятся между последовательными командами GO, перед исполнением помещаются в буфер команд.

Поскольку все операторы пакета компилируются в единый план исполнения, пакет должен быть логически завершенным. План исполнения, созданный для одного пакета, не может ссылаться на переменные, объявленные в другом пакете. Начало и коней комментария должны находиться в пределах одного пакета.

Следующий пример создает представление. Поскольку чтобы оператор

CREATE VIEW был единственным оператором пакета, следует изолировать от окружающих операторов USE и SELECT командами GO.

USE pubs

GO ;-

CREATE VIEW auth title3 ;

AS

SELECT * -.- :

FROM authors

GO

SELECT * FROM auth titles

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

Пакет - это набор из одного или операторов, которые клиент отсылает как

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



Все операторы SQL, которые приложение отправляет на сервер каицу исполнения, составляют единый пакет и генерируют один план исполнения.

Все операторы хранимой процедуры или триггера составляюич)! пакет. При компиляции любой хранимой процедуры или триггера получается единственный план исполнения.

Строка, обрабатываемая оператором EXECUTE, интерпретируется как пакет, в результате которого получается один план исполнения.

Строка, исполняемая системной хранимой процедурой spexecutesql, - это пакет, при компиляции которого получается один план исполнения.

Если приложение посылает пакет, в котором содержится оператор EXECUTE, план исполнения для обрабатываемой строки или хранимой процедуры выполняется отдельно от плана исполнения оператора EXECUTE. План исполнения, сгенерированный для с гро-ки, которую исполняет хранимая процедура также будет отделен от

исполнения остальной части в котором присутствует вызов процедуры

Если оператор пакета вызывает триггер, то план исполнения триггера выполняется отдельно от плана исполнения исходного пакета.

Например, пакет, который содержим ющие четыре оператора, генерирует пять планов исполнения:

оператор EXECUTE шяюший хранимую процедуру;

вызов процедурмси1екя1 для обработки строки; оператор EXECUTE, строку;

оператор UPDATE, ссылающийся на таблицу, у которой есть триггер на обновление. Рис. 2-12 иллюстрирует процесс обработки этих четырех операторов.

План исполнения пакета

EXEC оА

2. sp exectesql N insert.

3. EXEC . sp who)

4. UPDATETriggerTable...

План исполнения ProcA

2. План

исполнения

sp executesql

3. План исполнения исполняемой строки

4. План исполнения триггера

SELECT

IMSERT...

spwho...

RAISERROn.

Рис. 2-12. Обработка пакета

Хранимые процедуры и триггеры

Хранимая процедура - это группа операторов Transact-SQL, которая компилируется один раз и после этого може [няться многократно. Такая функциональность попышает поскольку отпадает необходимость в перекомпиляции операторов

Transact-SQL.

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



73 Использование nsact-SQL при работе с SQL Server Глава 2

Операторы CREATE PROCEDURE и CREATE TRIGGER не могут располагаться в нескольких пакетах. Другими словами, хранимая или триггер всегда создаются

в одном пакете и компилируются в исполнения.

Исполнение хранимых процедур и триггеров

SQL Server 2000 хранит только исходный текст хранимых процедур и триггеров. Когда хранимая процедура или триггер исполняется первый раз, исходный текст компилируется в план исполнения. Если до как план исполнения устареет и будет удален из памяти, хранимая процедура или триггер исполняется снова, реляционный механизм обнаруживает существующий план и использует его повторно. Если план устарел и удален из памяти, создается новый план исполнения. Этот процесс напоминает обработку SQL Server 2000 всех операторов SQL. Увеличение производительности при применении хранимых процедур и триггеров объясняется постоянством их SQL-операторов, что позволяет SQL Server использовать для них существующие планы исполнения.

В предыдущих версиях SQL Server выигрыш в производительности при использовании хранимых процедур был особенно заметен. Более ранние версии SQL Server не пытались повторно использовать планы исполнения для пакетов, которые не являлись хранимыми или триггерами. Единственный способ повторного использования планов исполнения заключался в программировании операторов SQL в хранимых процедур.

План исполнения хранимых и триггеров исполняется отдельно от плана ис-

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

Хранимые процедуры подробно обсуждаются в главе 8, а триггеры - в главе 9.

Сценарии Transact-SQL

Сценарий - это набор операторов сохраненных в файле. Этот файл можно

ввести в SQL Query Analyzer или утилиты и Они способны исполнить операторы SQL, хранящиеся в файле.

Сценарии Transact-SQL состоят из одного или нескольких пакетов. Конец пакета отмечается командой GO, Если в сценарии Transact-SQL нет ни одной команды GO, он исполняется как один пакет.

Сценарии Transact-SQL позволяют выполнять следующие задачи:

хранить постоянную копию команд, создающих на сервере таблицы и заполняющих их данными (механизм создания резервных копий);

переносить операторы с компьютера на компьютер(кри необходимости);

быстро обучать новых формируя у них навыки поиска ошибок и внесения

изменений в программы на основе шаблонов.



1 ... 25 26 27 [ 28 ] 29 30 31 ... 162

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика