Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Метод указания AIS

.pdf
Скачиваний:
8
Добавлен:
18.02.2016
Размер:
9.86 Mб
Скачать

WHEN выражение_один THEN результирующее_выражение_один WHEN выражение_два THEN результирующее_выражение_два

.

.

.

WHEN выражение_n THEN результирующее_выражение_n [ELSE альтернативное_результирующее_выражение] END

В этой форме функции CASE, выражение результирующее_выражение возвращается, только в том случае, если выражение, следующее за ключевым словом WHEN, логически равно указанному значению. Вы можете использовать в выражение любое количество фраз WHEN. Фраза ELSE необязательна – она выполняется, только если все фразы WHEN оцениваются как FALSE.

Сравнение одного значения с некоторым количеством других значений является типичной задачей, но иногда вам требуется большая степень гибкости. В это случае вы можете воспользоваться так называемым поисковым синтаксисом функции CASE Transact-SQL, который имеет следующий вид:

CASE

КАТУWHEN булево выражениеИМодин THENрезультирующее.СЕЙФУЛЛИНАвыражение один

WHEN булево выражение два THEN результирующее выражение два

.

.

.

WHEN булево выражение n THEN результирующее выражение n К[ELSEальтернативное.Н._ОМАРБЕКОВАрезультирующее выражение] А.С.

END

В этой форме CASE вы можетеСУБДуказать целое булево выражение в каждой фразе WHEN вместо неявного сравнения выражения в простой форме. Учтите, что при определении истинности можно оценивать несколько булевых выражений. Transact-SQL возвратит только первое результирующее_выражение, а затем перейдет к оператору, следующему за END.

Используйте простую структуру CASE

1. Введите

141

КАТУ2. В панели инструментовИМанализатора.С.запросовСЕЙФУЛЛИНАQuery Analyzer нажмите кнопку Execute Query (Выполнить сценарий). Query Analyzer отобразит результат выполнения запроса.

К.Т. А.С.

Используйте поисковую форму структуры CASE

1. Введите

142

2.В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить запрос). Query Analyzer отобразит результат выполнения запроса.

КАТУ

К.Т. А.С.

Команда GOTO

Структуры IF...ELSE и CASE управляют порядком выполнения операторов, основываясь на результатах вычисления булевого выражения. Команда GOTO является безусловной. Она передает выполнение непосредственно к оператору, следующему после метки, которая на него указывает.

В SQL Server метки являются неисполняемыми операторами, имеющими следующий синтаксис:

имя_метки:

Имя метки должно удовлетворять правилам, принятым для идентификаторов. Сама команда GOTO имеет очень простой синтаксис:

GOTO имя_метки

Код "спагетти"

143

GOTO является весьма непопулярной в кругу программистов командой. По большому счету это связано с историческими причинами: ранние языки предоставляли очень мало механизмов управления ходом выполнения – обычно только структуру IF и команду GOTO. Как следствие, создаваемый код оказывался очень сложным для восприятия и анализа. Подобный код получил название "спагетти".

Применение команды GOTO, тем не менее, бывает вполне оправданным, особенно при обработке ошибок. Если вы будете аккуратно использовать эту команду, она даже сможет сделать код проще для понимания. Следует всего лишь следить, что вы использовали команду GOTO для выполнения задач, которые могут быть более просто выражены через другие команды или функции передачи управления.

Используйте команду GOTO для безусловного перехода

1. Введите

.СЕЙФУЛЛИНА

К.Т.Н. ОМАРБЕКОВА А.С.

2. В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить запрос). Query Analyzer отобразит результат запроса.

Циклы

Последняя из команд управления ходом выполнения позволяет вам выполнять оператор или блок операторов до тех пор, пока выполняется (является истинным) указанное условие.

Простой цикл WHILE

Простейшая форма цикла WHILE содержит булево выражение и оператор или блок операторов. Операторы будут повторяться, пока булево выражение не примет FALSE. Если при первой оценке

144

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

Используйте простой цикл WHILE

1. Введите

ИМ.С.СЕЙФУЛЛИНА

К.Т2. В.панелиНинструментов. ОМАРБЕКОВАанализатора запросов Query Analyzer нажмите кнопку ExecuteА.QueryС. (Выполнить запрос). Query Analyzer отобразит результат запроса.

Сложные циклы WHILE

Синтаксис оператора WHILE также позволяет вам осуществлять и более сложную логику выполнения, в отличие от простой логики в предыдущем примере. Фраза BREAK вызывает выход из цикла; выполнение продолжается с оператора, следующего за фразой END блока оператора структуры WHILE. Фраза CONTINUE возвращает выполнение на начало цикла, при этом операторы, следующие за CONTINUE в пределах блока операторов, будут пропущены. Оба оператора, BREAK и CONTINUE, обычно выполняются как условные в пределах оператора IF.

145

Если вам потребуется, вы можете использовать команды BREAK и CONTINUE в одном и том же операторе WHILE. Вы также можете использовать каждую команду несколько раз внутри блока операторов, хотя при этом будет исполняться только одна задача.

Используйте структуру WHILE...BREAK

1. Введите

ИМ.С.СЕЙФУЛЛИНА

К.Т2. В.панелиНинструментов. ОМАРБЕКОВАанализатора запросов Query Analyzer нажмите кнопку ExecuteА.QueryС. (Выполнить запрос). Query Analyzer отобразит результат выполнения запроса.

Используйте структуру WHILE...CONTINUE

1. Введите

146

2. В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query КАТУ(Выполнить сценарийИМ). QueryAnalyzer.СЕЙФУЛЛИНАотобразит результат выполнения запроса.

К.Т. А.С.

147

21 Хранимые процедуры Задание

1.Перечислить преимущества хранимых процедур над SQL-сценариями.

2.Какие существуют методы взаимодействия хранимых процедур с внешними процессами

3.Какие существуют группы хранимых процедур

4.Какими символами начинаются системные и пользовательские хранимые процедуры.

5.Выполнить хранимую процедуру sp_who

6.Выполнить хранимую процедуру sp_renamedb для переименования базы данных с входными параметрами @dbname, @newname

7.Описать синтаксис оператора CREATE PROCEDURE

8.Создать хранимую процедуру MyProc выборки из таблицы lichkart столбцов mather, father и запустить ее на выполнение. Найти местоположение процедуры MyProc.

Хранимая процедура – это набор инструкций T-SQL, выполняемый как единое целое. Для создания хранимой процедуры используется инструкция CREATE PROCEDURE, а для выполнения хранимой процедуры – инструкция EXECUTE или соответствующая функция используемого приложением программного интерфейса или доступа к SQL Server. Рассматриваются многие типы хранимых процедур, их создание и выполнение.

КАТУМы рассмотрели SQLИМ-сценарии, представляющие.С.СЕЙФУЛЛИНАсобой пакеты операторов Transact-SQL, хранимые в текстовом файле. SQL Server также поддерживает хранимые процедуры, которые представляют собой

пакеты операторов Transact-SQL, сохраняемые сервером. Теперь познакомимся с созданием и использованием хранимых процедур.

Понятие о хранимых процедурах

КХранимые.Т.Нпроцедуры. ОМАРБЕКОВА– не единственное средство выполнения операторов Transact-SQLА. Мыуже . сталкивались с SQL-сценариями и с возможностью передавать команды непосредственно из

хранимые процедурыСУБДявляются объектами базы данных; они размещаются в файле базы данных и перемещаются вместе с файлом в случае отключения или репликации базы данных;

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

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

Обмен данными с хранимыми процедурами

SQL-сценарии, с которыми мы работали, выполнялись независимо – у нас не было никакой возможности передать им какую-либо информацию, а единственная информация, которую они возвращали, отображалась в панелях сетки Grid или в панели сообщений Message Pane окна Query (Запрос). Хранимые процедуры предоставляют два метода взаимодействия с внешними процессами: через параметры и через возвращаемые значения.

Параметры представляют собой специальный тип локальных переменных, объявляемых как часть хранимой процедуры. Вы можете использовать параметры для передачи информации хранимым процедурам (входные параметры) или получения данных обратно из хранимой процедуры (выходные параметры).

148

Возвращаемое значение схоже с результатом выполнения функции и аналогичным образом может быть присвоено локальной переменной. Возвращаемые значения всегда являются целыми числами. Теоретически они могут быть использованы для возврата любого результата, но в соответствии с соглашением они применяются для возврата статуса выполнения хранимой процедуры. Например, хранимая процедура может возвращать 0, если все идет нормально, или -1, если возникла ошибка. Более сложные хранимые процедуры могут возвращать различные значения для указания типа ошибки.

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

Системные процедуры

Хранимые процедуры делятся на две группы: системные процедуры, создаваемые SQL Server, и пользовательские хранимые процедуры, которые вы создаете самостоятельно. Системные хранимые процедуры хранятся в главной базе данных. Все они начинаются с символов sp_.

Совет. Вы можете создать хранимую процедуру, использовав sp_ в качестве начальной части имени, но

КАТУлучше этого не делатьИМ. .С.СЕЙФУЛЛИНА Поскольку SQL Server всегда ищет хранимые процедуры прежде всего в главной базе данных, если

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

КВ.главнойТ.Нбазе данных. ОМАРБЕКОВАоколо сотни системных процедур. Многие из них предоставляют Асредствадля . программного выполнения задач администрирования. Например, процедура sp addlogin позволяет вам

добавлять идентификатор учетной записи, а процедура sp_add_jobschedule дает возможность составлять расписание заданий, таких как резервное копирование базы данных.

Другие системные процедурыСУБДпомогают вам управлять объектами базы данных. Например, процедура sp_rename дает возможность переименовывать объекты базы данных, а процедура sp_renamedb предоставляет средства для переименования базы данных.

Совет. Единственным способом переименования базы данных является использование системной процедуры sp_renamedb. Это действие не может быть выполнено в Enterprise Manager.

Важная группа системных процедур предоставляет информацию о текущем статусе системы: процедура sp_who предоставляет информацию о текущих пользователях и процессах; процедура sp_cursor_list предоставляет список текущих курсоров для данного соединения; процедура sp_helpdb предоставляет список всех текущих баз данных, обслуживаемых сервером, а также сообщает вам физическое местоположение файла данных и журнала транзакций для любой заданной базы данных. Вы также можете воспользоваться процедурой sp_help для получения информации об объектах базы данных. В эту информацию входят: имя, владелец и тип каждого объекта базы данных, сведения о системных и пользовательских типах данных, а также имена и параметры хранимых процедур.

149

Пользовательские хранимые процедуры

Подобно таблицам базы данных, пользовательские хранимые процедуры представляют собой объект, являющийся частью базы данных, в которой он создан, и будет перемещаться вместе с ней. Различие заключается в том, что объекты хранимых процедур содержат не данные, а код Transact-SQL.

Примечание. SQL Server создает в каждой базе данных несколько хранимых процедур. Все имена этих хранимых процедур начинаются с dt_. Они используются для управления исходными данными, а также при преобразовании данных.

Выполнение хранимой процедуры обычно занимает меньше времени, чем запуск пакета команд из приложения. Дело в том, что SQL Server может выполнять некоторые действия из выполняемой процедуры с опережением, а затем сохранять результаты выполнения этих действий в хранимой процедуре.

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

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

рассмотрим эти действия в обратном порядке: сначала мы познакомимся с использованием хранимых

КАТУпроцедур, а затем выИМсоздадите своюсобственную.СЕЙФУЛЛИНА. Использование хранимых процедур

Для вызова пользовательских и системных хранимых процедур используется оператор EXECUTE. Если

Кхранимая.Т.процедураН.неОМАРБЕКОВАтребует параметров, или если она не возвращает результат, синтаксисАее.будетС. очень простым:

EXECUTE имя_процедуры

Совет. Ключевое слово EXECUTEСУБДможно не указывать, если вызов хранимой процедуры является первым оператором в пакете. Однако, как и в других подобных случаях, лучше лишний раз подстраховаться. Поэтому заведите привычку всегда использовать ключевое слово EXECUTE или его аббревиатуру EXEC при использовании хранимой процедуры.

Выполните простую хранимую процедуру

1.Нажмите кнопку New Query (Новый запрос) в панели инструментов анализатора запросов

Query Analyzer. Query Analyzer откроет новое окно Query (Запрос).

2.Введите в окне запроса Query следующий оператор:

150