Что такое хранимая процедура?
определение:
Заранее запишите часто используемые или очень сложные задачи с помощью операторов SQL и сохраните их с указанным именем. Затем, когда вы захотите в будущем попросить базу данных предоставить службы с теми же функциями, что и определенные хранимые процедуры, вам нужно будет только вызвать команду Execute. . Автозаполнение команд.
В этот момент кто-то может спросить: Значит, хранимая процедура — это всего лишь набор операторов SQL?
Почему Microsoft хочет добавить эту технологию?
Так в чем же разница между хранимыми процедурами и обычными операторами SQL?
Преимущества хранимых процедур:
1. Хранимые процедуры компилируются только при их создании. Нет необходимости перекомпилировать каждый раз, когда хранимая процедура будет выполняться в будущем. Как правило, операторы SQL компилируются один раз при каждом выполнении, поэтому использование хранимых процедур может улучшить выполнение. скорость базы данных.
2. При выполнении сложных операций с базой данных (таких как обновление, вставка, запрос, удаление в нескольких таблицах) эту сложную операцию можно инкапсулировать в хранимую процедуру и использовать вместе с обработкой транзакций, обеспечиваемой базой данных.
3. Хранимые процедуры можно использовать повторно, что позволяет снизить нагрузку на разработчиков баз данных.
4. Высокая безопасность, можно настроить, чтобы только определенный пользователь имел право использовать указанный хранимый процесс.
Типы хранимых процедур:
1. Системные хранимые процедуры: начиная с sp_, используемые для настройки системы, получения информации и связанных с ней операций по управлению, например sp_help, которая используется для получения соответствующей информации об указанном объекте.
2. Расширенная хранимая процедура начинается с XP_ и используется для вызова функций, предоставляемых операционной системой.
exec master..xp_cmdshell 'ping 10.8.16.1'
3. Пользовательские хранимые процедуры. Это то, что мы называем хранимыми процедурами.
Общие форматы
Создать процедуру имя_процедуры
[@parameter data_type][выходной]
[с]{перекомпиляция|шифрование}
как
ql_statement
объяснять:
вывод: указывает, что этот параметр может быть возвращен
с {перекомпиляцией|шифрованием}
перекомпилировать: означает, что эта хранимая процедура будет перекомпилироваться каждый раз при выполнении.
шифрование: содержимое созданной хранимой процедуры будет зашифровано.
нравиться:
Содержание настольной книги следующее:
Стоимость нумерованного названия книги
001 Введение в язык C$30
002 Разработка отчета PowerBuilder$52
Пример 1. Хранимая процедура для запроса содержимого таблицы Book.
создать процедуру query_book
как
выбрать * из книги
идти
исполнительный запрос_книга
Пример 2. Добавьте запись в таблицу book и запросите общее количество всех книг в этой таблице.
Создать процедуру Insert_book
@param1 char(10),@param2 varchar(20),@param3 деньги,@param4 вывод денег
с шифрованием ----------шифрование
как
вставить книгу(номер, название книги, цена) Значения(@param1,@param2,@param3)
выберите @param4=sum(price) из книги
идти
Пример выполнения:
объявить @total_price деньги
exec Insert_book '003', 'Руководство по разработке элементов управления Delphi', 100 долларов США, @total_price
print 'Общая сумма'+convert(varchar,@total_price)
идти
Три типа возвращаемых значений из хранимых процедур:
1. Верните целое число с помощью Return
2. Возврат параметров в выходном формате.
3. Набор записей
Разница между возвращаемыми значениями:
И выходные данные, и возврат могут быть получены как переменные в пакетной программе, а набор записей передается обратно клиенту, который выполняет пакет.
Пример 3. Имеются две таблицы «Продукт» и «Заказ» со следующим содержимым:
Продукт
Номер продукта Название продукта Количество заказа клиента
001 ручка 30
002 кисть 50
003 Карандаш 100
Заказ
Номер продукта Имя клиента Депозит клиента
001 Район Наньшань$30
002 Район Луоху$50
003 Район Баоань$4
Используйте номер в качестве условия соединения, чтобы соединить две таблицы во временную таблицу. Эта таблица содержит только имя продукта. Общая сумма.
Общая сумма = депозит * количество заказа, временная таблица помещается в процесс хранения.
Код выглядит следующим образом:
Создать процедуру temp_sale
как
выберите a.Номер продукта,a.Название продукта,b.Имя клиента,b.Депозит клиента,a.Количество заказа клиента* b.Депозит клиента в качестве общей суммы
в #temptable из продукта внутреннее соединение Заказ b на номер a.product=b.номер продукта
если @@error=0
напечатайте «Хорошо»
еще
напечатать «Не удалось»