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

Команда go

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

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

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

USE pubs

GO

CREATE VIEW auth_titles

AS

SELECT *

FROM authors

GO

SELECT * FROM auth_titles

GO

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

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

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

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

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

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

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

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

  • оператор EXECUTE, исполняющий хранимую процедуру;

  • вызов процедуры sp_executesql для обработки строки;

  • оператор EXECUTE, обрабатывающий строку;

  • оператор UPDATE, ссылающийся на таблицу, у которой есть триггер на обновление.

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

1

EXEC ProA

2

sp exectesql N' INSERT...1

3

EXEC ( 'sp who' )

4.

UPDATE Trigger-Table. ..

  1. План 2. План испол- 3. План испол- 4. План исполне-

Испол- ненияl нения исполня- ния триггера

нения sp_executesql емой строки

SELECT

INSERT

SP_WHO

RAISERROR

Рис. 1.9. иллюстрирует процесс обработки четырех операторов.