Ответы:
Хранимые процедуры представляют собой пакет SQL-операторов, которые могут быть выполнены несколькими способами. Большинство основных СУБД поддерживают хранимые процедуры; однако не все так делают. Вам нужно будет проверить с вашей конкретной справочной документацией СУБД для специфики. Поскольку я больше всего знаком с 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
Преимущество хранимых процедур заключается в том, что вы можете централизовать логику доступа к данным в одном месте, которое затем легко оптимизировать администраторам баз данных. Хранимые процедуры также имеют преимущество в плане безопасности, поскольку вы можете предоставлять права на выполнение хранимой процедуры, но пользователю не нужно иметь разрешения на чтение / запись для базовых таблиц. Это хороший первый шаг против внедрения 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 у нас есть разные типы хранимых процедур:
Системные процедуры хранятся в базе данных master и начинаются с 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
результат
Сообщение 2730, уровень 11, состояние 1, процедура SecondTest, строка 1 [Batch Start Line 3] Невозможно создать процедуру «SecondTest» с номером группы 2, поскольку процедура с тем же именем и номером группы 1 в настоящее время не существует в база данных. Должен выполнить CREATE PROCEDURE '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.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
Я узнал об этом от essential.com ... это очень полезно.
В хранимых процедурах операторы записываются только один раз и сокращают сетевой трафик между клиентами и серверами. Мы также можем избежать Sql Injection Attacks.
ORM
любитьEntity Framework
делатьCRUD
операции?