Відповіді:
Збережені процедури - це пакет операторів SQL, які можна виконати двома способами. Більшість основних DBM підтримують збережені процедури; однак, не всі так. Вам потрібно буде уточнити у вашій конкретній довідковій документації СУБД щодо конкретних даних. Оскільки я найбільше знайомий із SQL Server, я буду використовувати його як свої зразки.
Для створення збереженої процедури синтаксис досить простий:
CREATE PROCEDURE <owner>.<procedure name>
<Param> <datatype>
AS
<Body>
Так, наприклад:
CREATE PROCEDURE Users_GetUserInfo
@login nvarchar(30)=null
AS
SELECT * from [Users]
WHERE ISNULL(@login,login)=login
Перевага збережених процедур полягає в тому, що ви можете централізувати логіку доступу до даних в єдине місце, яке потім для DBA легко оптимізувати. Збережені процедури також мають перевагу безпеки, оскільки ви можете надати права виконання на збережену процедуру, але користувачеві не потрібно мати дозволу на читання / запис у базових таблицях. Це хороший перший крок проти ін'єкції SQL.
Зберігаються процедури мають і недоліки, в основному технічне обслуговування, пов’язане з вашою базовою операцією CRUD . Скажімо, для кожної таблиці ви маєте пункт Вставка, оновлення, видалення та принаймні один вибір на основі первинного ключа, тобто кожна таблиця матиме 4 процедури. Тепер візьміть базу даних пристойного розміру з 400 таблиць, і у вас є 1600 процедур! І це припускаючи, що у вас немає дублікатів, які, напевно, будете.
Саме тут використання ORM або якогось іншого методу для автоматичного генерування основних операцій CRUD має багато заслуг.
Збережена процедура - це набір попередньо складених операторів SQL, які використовуються для виконання спеціального завдання.
Приклад: Якщо у мене є Employee
таблиця
Employee ID Name Age Mobile
---------------------------------------
001 Sidheswar 25 9938885469
002 Pritish 32 9178542436
Спочатку я виймаю Employee
таблицю:
Create Procedure Employee details
As
Begin
Select * from Employee
End
Щоб запустити процедуру на SQL Server:
Execute Employee details
--- (Employee details is a user defined name, give a name as you want)
Тоді по-друге, я вставляю значення в таблицю працівника
Create Procedure employee_insert
(@EmployeeID int, @Name Varchar(30), @Age int, @Mobile int)
As
Begin
Insert Into Employee
Values (@EmployeeID, @Name, @Age, @Mobile)
End
Щоб запустити параметризовану процедуру на SQL Server:
Execute employee_insert 003,’xyz’,27,1234567890
--(Parameter size must be same as declared column size)
Приклад: @Name Varchar(30)
У Employee
таблиці розмір Name
стовпця повинен бути varchar(30)
.
Збережена процедура - це група операторів SQL, створена і зберігається в базі даних. Збережена процедура приймає вхідні параметри, так що одну процедуру може використовувати через мережу кілька клієнтів, використовуючи різні вхідні дані. Збережені процедури зменшать мережевий трафік та збільшать продуктивність. Якщо ми змінимо збережену процедуру, всі клієнти отримають оновлену збережену процедуру.
Зразок створення збереженої процедури
CREATE PROCEDURE test_display
AS
SELECT FirstName, LastName
FROM tb_test;
EXEC test_display;
Переваги використання збережених процедур
Збережена процедура дозволяє модульне програмування.
Ви можете створити процедуру один раз, зберігати її в базі даних і викликати її будь-яку кількість разів у своїй програмі.
Збережена процедура дозволяє швидше виконувати.
Якщо для операції потрібна велика кількість SQL-коду, який виконується повторно, збережені процедури можуть бути швидшими. Вони аналізуються та оптимізуються при їх першому виконанні, а складена версія збереженої процедури залишається в кеш-пам'яті для подальшого використання. Це означає, що збережену процедуру не потрібно переосмислювати та повторно оптимізувати при кожному використанні, що призводить до набагато швидших термінів виконання.
Збережена процедура може зменшити мережевий трафік.
Операція, що вимагає сотні рядків коду Transact-SQL, може бути виконана за допомогою одного оператора, який виконує код у процедурі, а не надсилаючи сотні рядків коду по мережі.
Збережені процедури забезпечують кращу безпеку ваших даних
Користувачі можуть надати дозвіл на виконання збереженої процедури, навіть якщо вони не мають дозволу безпосередньо виконувати висловлювання процедури.
У SQL Server у нас зберігаються різні типи процедур:
Системне -stored процедура зберігається в основній базі даних , і цих почав з sp_
префіксом. Ці процедури можна використовувати для виконання різноманітних завдань для підтримки функцій SQL Server для зовнішніх викликів додатків у системних таблицях
Приклад: sp_helptext [StoredProcedure_Name]
Зазначені користувачем збережені процедури зазвичай зберігаються в базі даних користувачів і, як правило, розроблені для виконання завдань в базі даних користувача. Під час кодування ці процедури не використовуються в sp_
префікс , тому що якщо ми будемо використовувати sp_
префікс першого, він буде перевіряти головну базу даних, а потім він приходить до певних користувачем бази даних.
Розширені збережені процедури - це процедури, що викликають функції з файлів DLL. На сьогоднішній день розширені збережені процедури застаріли з тієї причини, що було б краще уникати використання розширених збережених процедур.
Як правило, збережена процедура - це "функція SQL". Вони мають:
-- a name
CREATE PROCEDURE spGetPerson
-- parameters
CREATE PROCEDURE spGetPerson(@PersonID int)
-- a body
CREATE PROCEDURE spGetPerson(@PersonID int)
AS
SELECT FirstName, LastName ....
FROM People
WHERE PersonID = @PersonID
Це приклад, орієнтований на T-SQL. Збережені процедури можуть виконувати більшість операторів SQL, повертати скалярні та на основі значень таблиці та вважаються більш безпечними, оскільки вони запобігають атакам ін'єкції SQL.
Подумайте про таку ситуацію,
ПРИМІТКА:
Збережена процедура в основному використовується для виконання певних завдань у базі даних. Наприклад
Збережена процедура - це не що інше, як група операторів SQL, складених в єдиний план виконання.
Приклад: створення збереженої процедури
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE GetEmployee
@EmployeeID int = 0
AS
BEGIN
SET NOCOUNT ON;
SELECT FirstName, LastName, BirthDate, City, Country
FROM Employees
WHERE EmployeeID = @EmployeeID
END
GO
Змінення або змінення збереженої процедури:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE GetEmployee
@EmployeeID int = 0
AS
BEGIN
SET NOCOUNT ON;
SELECT FirstName, LastName, BirthDate, City, Country
FROM Employees
WHERE EmployeeID = @EmployeeID
END
GO
Видаліть або видаліть збережену процедуру:
DROP PROCEDURE GetEmployee
Збережена процедура - це попередньо складений набір одного або декількох операторів SQL, які виконують певну задачу.
Збережена процедура повинна виконуватися окремо за допомогою EXEC
Збережена процедура може повертати кілька параметрів
Збережена процедура може бути використана для здійснення транзакцій
"Що таке збережена процедура" вже відповіли в інших публікаціях тут. Що я опублікую - це один менш відомий спосіб використання збереженої процедури. Це grouping stored procedures
абоnumbering stored procedures
.
Посилання на синтаксис
; number
відповідно до цього
Необов’язкове ціле число, яке використовується для групування однойменних процедур. Ці згруповані процедури можна скинути разом за допомогою одного оператора DROP PROCEDURE
Приклад
CREATE Procedure FirstTest
(
@InputA INT
)
AS
BEGIN
SELECT 'A' + CONVERT(VARCHAR(10),@InputA)
END
GO
CREATE Procedure FirstTest;2
(
@InputA INT,
@InputB INT
)
AS
BEGIN
SELECT 'A' + CONVERT(VARCHAR(10),@InputA)+ CONVERT(VARCHAR(10),@InputB)
END
GO
Використовуйте
exec FirstTest 10
exec FirstTest;2 20,30
Результат
Ще одна спроба
CREATE Procedure SecondTest;2
(
@InputA INT,
@InputB INT
)
AS
BEGIN
SELECT 'A' + CONVERT(VARCHAR(10),@InputA)+ CONVERT(VARCHAR(10),@InputB)
END
GO
Результат
Msg 2730, Рівень 11, стан 1, процедура SecondTest, рядок 1 [Початкова лінія рядка 3] Неможливо створити процедуру "SecondTest" з груповим номером 2, оскільки процедура з такою ж назвою та номером групи 1 наразі не існує в база даних. Потрібно виконати CREATE ПРОЦЕДУРУ "SecondTest"; 1 перший.
Список літератури :
ОБЕРЕЖНО
Збережена процедура - це іменована колекція операторів SQL та логіки процедур, тобто скомпільована, перевірена та збережена в базі даних сервера. Збережена процедура, як правило, обробляється як інші об'єкти бази даних та контролюється через механізм захисту сервера.
У СУБД збережена процедура - це набір операторів SQL з присвоєним ім'ям, які зберігаються в базі даних у складеному вигляді, щоб ними можна було ділитися низкою програм.
Використання збереженої процедури може бути корисною для
Надання контрольованого доступу до даних (кінцеві користувачі можуть вводити або змінювати дані, але не можуть писати процедури)
Забезпечення цілісності даних (дані будуть вводитись послідовно) та
Підвищує продуктивність (заяви про збережену процедуру потрібно писати лише один раз)
для простого,
Збережена процедура - це збережені програми , програма / функція, що зберігаються в базі даних.
Кожна збережена програма містить тіло, яке складається з оператора SQL. Цей вислів може бути складною заявою, що складається з декількох тверджень, розділених символами крапки з комою (;).
CREATE PROCEDURE dorepeat(p1 INT)
BEGIN
SET @x = 0;
REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;
END;
Збережені процедури в SQL Server можуть приймати вхідні параметри і повертати кілька значень вихідних параметрів; у SQL Server, що зберігається у програмі операторами програми для виконання операцій у базі даних та повернення значення стану процедурі виклику або пакеті.
Переваги використання збережених процедур у SQL Server
Вони дозволяють модульне програмування. Вони дозволяють швидше виконати. Вони можуть зменшити мережевий трафік. Вони можуть використовуватися як механізм безпеки.
Ось приклад збереженої процедури, яка приймає параметр, виконує запит і повертає результат. Зокрема, збережена процедура приймає BusinessEntityID як параметр і використовує це для узгодження з первинним ключем таблиці HumanResources.E Employee для повернення запитуваного співробітника.
> create procedure HumanResources.uspFindEmployee `*<<<---Store procedure name`*
@businessEntityID `<<<----parameter`
as
begin
SET NOCOUNT ON;
Select businessEntityId, <<<----select statement to return one employee row
NationalIdNumber,
LoginID,
JobTitle,
HireData,
From HumanResources.Employee
where businessEntityId =@businessEntityId <<<---parameter used as criteria
end
Я дізнався це на веб-сайті basic.com ... це дуже корисно.
Записи в Збережених процедурах пишуться лише один раз і зменшують мережевий трафік між клієнтами та серверами. Ми також можемо уникнути атак ін'єкцій Sql.
ORM
хочетеEntity Framework
робитиCRUD
операції?