Создание и управление индексами. Создание и управление встроенными процедурами. Оптимизация производительности запросов. Управление транзакциями и блокировками, страница 18

NULL

(20 row(s) affected)

Расширенные встроенные процедуры:

*  Программируются с использованием интерфейса программирования Open Data Services.

*  Позволяет вам создавать ваши собственные внешние программы с использованием языков программирования, таких как Visual C++.

*  Могут содержать множество функций;

*  Могут быть вызваны из клиента или SQL Server.

*  Могут быть добавлены только в базу данных master.

Существуют две основные расширенные процедуры:

*  xp_cmdshell – выполняет указанную строку в командной строке ОС.

*  xp_logevent – Сохраняет указанное сообщение в журнал SQL Server или Windows.

Вы можете отправлять e-mail сообщения с использованием xp_sendmail процедуры.

Сообщения об ошибках

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

Вы должны использовать стратегии программирования, такие как проверку на существование для распознавания ошибок. Когда возникает ошибка, предоставляйте столько информации пользователю, сколько возможно.

Оператор RETURN может возвращать целое значение статуса. Возвращаемое значение 0 означает удачное выполнение, значения от 0 до -14 используются, значения от -15 до -99 зарезервированы для дальнейшего использования.

Пример

Следующий пример создаёт процедуру, которая возвращает информацию из таблицы Orders с помощью запроса просмотрщика Orders Qry. Оператор RETURN возвращает общее количество строк и оператора SELECT в другую процедуру.

USE Northwind

GO

CREATE PROC dbo.GetOrders

@CustomerID nchar(10)

AS

SELECT OrderID, CustomerID, EmployeeID

FROM [Orders Qry]

WHERE CustomerID = @CustomerID

RETURN (@@ROWCOUNT)

GO

Пример

Следующая встроенная процедура определяет пользовательское сообщение, которое должно быть записано в журнал Windows 2000.

EXEC sp_addmessage

@msgnum=50010,

@severity=10,

@msgtext='Customer cannot be deleted.',

@with_log='true'

Системная функция @@error содержит номер ошибки последнего выполненного оператора Transact-SQL. Её значение изменяется после выполнения каждого оператора. Если значение равно 0, значит оператор выполнен удачно.

Оператор RAISERROR возвращает сообщение ошибки определённое пользователем и набор системных флагов для записи, возникшей ошибки. Следующий пример генерирует сообщение ошибки и записывает в журнал приложений Windows:

RAISERROR (50010, 16, 1) WITH LOG

Оператор PRINT возвращает пользовательское сообщение обработчику сообщений клиента, однако, в отличие от RAISERROR, этот оператор не помещает код ошибки в @@error функцию.

9.5 Рекомендуемая практика

Для написания более эффективных процедур, следуйте следующей рекомендуемой практики:

*  Проверяйте все входные параметры для определения отсутствующих значений;

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

*  Проверяйте ошибки выполнения, и бизнес логики до начала транзакции.

*  Используйте одинаковые настройки соединения для всех процедур.

9.6 Лабораторные

Использование обработки ошибок в встроенных процедурах

Рассмотрите файлы SupplierProduct.sql и SupplierProductInsert.sql для понимания процесса генерации ошибок.

Возвращаемые значения

Примеры возвращаемых значений расположены в файлах: Return1.sql, Return2.sql, Return3.sql.

Возвращаемые значения

Для просмотра времени выполнения процедуры используйте SQL Profiler.

*  Запустите SQL Profiler.

*  Подключитесь к серверу.

*  Перед вами откроется окно создания нового просмотрщика Trace properties. Просто нажмите RUN

*  Выполните скрипт в файле SupplierProductInsert.sql

*  Переключитесь в SQL Profiler и просмотрите данные о выполнении скрипта.


Разработка функций определённых пользователем

10.1 Что такое функции определённые пользователем