Хранимые процедуры
Хранимые процедуры представляют уровень абстракции, ограждающий приложение от низкоуровневой структуры базы данных. Будучи главной опорой любого приложения SQL Sеrver, хранимые процедуры позволяют изменять структуру баз данных и управлять производительностью без переписывания приложений и распространения их обновлений [2].
Хранимая процедура – это одна или несколько инструкций, которым дано имя и которые хранятся в базе данных. Почти любая команда языка T-SQL может быть включена в хранимую процедуру, что делает процедуры подходящими для приложений и для решения административных задач. В хранимых процедурах не могут применяться лишь следующие команды:
USE <database_name>;
SET SHOWPLAN_TEXT;
SET SHOWPLAN_ALL;
SET PARSEONLY;
SET SHOWPLAN_XML;
CREATE AGGREGATE;
CREATE RULE;
CREATE DEFAULT;
CREATE SCHEMA;
CREATE FUNCTION или ALTER FUNCTION;
CREATE TRIGGER или ALTER TRIGGER;
CREATE PROCEDURE или ALTER PROCEDURE;
CREATE VIEW или ALTER VIEW.
При первом обращении к хранимой процедуре SQL Server генерирует планы компиляции и выполнения, которые хранятся в кэше запроса и повторно используются последующим выполнением. Следовательно, применяя хранимые процедуры, вы можете получить небольшой выигрыш в производительности, т.к. при последующих выполнениях хранимой процедуры исчезнет необходимость в синтаксическом анализе, компиляции и генерации плана запроса. Но главное назначение хранимой процедуры – создание защищенного слоя и прикладного интерфейса для ваших баз данных, которые отделяют приложение от изменения в структуре базы данных.
Далее приведена синтаксическая запись общего вида для создания хранимой процедуры [2].
CREATE {PROC | PROCEDURE} [schema_name.] procedure_name [; number]
[ {@parameter [type_schema_name.]data_type}
[VARYING] [= default] [OUT | OUTPUT] [READONLY]
] [, ... n]
[ WITH <procedure_option> [, ... n]]
[ FOR REPLICATION]
AS {<sql_statement> [;][, ... n] | <method_specifier>} [;]
Содержание работы.
Создайте запрос, который будет формировать выборку данных о записях чека с включением данных о проданных товарах. В выборку включить поля: BillID, BillItemID, ProductID, Product.Name, Number, Price, Cost, Bill.Date, BillItem.Date. Используйте внутреннее соединение таблиц (INNER JOIN). Примените условие фильтрации согласно своему варианту.
Создайте запрос, который будет формировать выборку данных с информацией о чеках, проданных товарах и покупателях со следующими полями: BillID, BillItemID, ProductID, BuyerID, Product.Name, Number, Price, Cost, Bill.Date, BillItem.Date, Buyer.Name, Photo. Используйте внешнее левое соединение от таблицы Bill к таблице Buyer (LEFT JOIN).
Объясните, что делает полученный запрос? Почему в этом случае используется внешнее соединение, а не внутреннее, как в предыдущем примере?
Создайте запрос, который будет формировать выборку данных с информацией о чеках, проданных товарах, покупателях и сотрудниках, расширив перечень полей в запросе из п.2. Используйте внешнее правое соединение от таблицы Bill к таблице Employee (RIGHT JOIN).
Объясните, что делает данный запрос?
Создайте запрос, который будет формировать выборку с данными по чекам и покупателям со следующими полями: BuyerID, BillID, Name, Date. Ограничьте выборку данных, используя фильтр по дате в таблице чеков (используйте фильтр в разделе WHERE). Используйте внешнее полное соединение таблиц Buyer и Bill (FULL JOIN).
Объясните, что делает этот запрос?
Создайте запрос, который будет формировать выборку, содержащую все возможные пары (сотрудник, покупатель) со следующими полями: EmployeeID, BuyerID, Buyer.Name, Employee.Name, Employee.Post. Используйте перекрестное соединение таблиц Employee и Buyer (CROSS JOIN).
Сохраните запрос из пункта 1 в виде представления. В среде Microsoft SQL Management Studio в разделе Views используйте команду New View… Назовите представление BillAndProduct. Проверьте результат командой: SELECT * FROM BillAndProduct.
Сохраните запросы из пунктов 2 и 3 аналогичным образом.
Запрос из пункта 4 сохраните в виде хранимой процедуры с одним параметром – датой. Для создания процедуры используйте команду CREATE PROCEDURE или воспользуйтесь командой New Stored Procedure в разделе Programmability/Stored Procedures. Назовите хранимую процедуру BillAndBuyer. Проверьте работоспособность процедуры, используя ее вызов: exec BillAndProduct @date=’2011-07-05’.
Сохраните запрос из пункта 5 в хранимой процедуре.
Подготовьте материал для включения в отчетную презентацию по курсу Базы данных: специальный курс.
