Respuestas:
Los procedimientos almacenados son un lote de sentencias SQL que se pueden ejecutar de dos maneras. La mayoría de los DBM principales admiten procedimientos almacenados; Sin embargo, no todos lo hacen. Deberá verificar con su documentación de ayuda DBMS particular para obtener información específica. Como estoy más familiarizado con SQL Server, lo usaré como mis muestras.
Para crear un procedimiento almacenado, la sintaxis es bastante simple:
CREATE PROCEDURE <owner>.<procedure name>
<Param> <datatype>
AS
<Body>
Así por ejemplo:
CREATE PROCEDURE Users_GetUserInfo
@login nvarchar(30)=null
AS
SELECT * from [Users]
WHERE ISNULL(@login,login)=login
Una ventaja de los procedimientos almacenados es que puede centralizar la lógica de acceso a datos en un solo lugar que luego es fácil de optimizar para los DBA. Los procedimientos almacenados también tienen un beneficio de seguridad, ya que puede otorgar derechos de ejecución a un procedimiento almacenado, pero el usuario no necesitará tener permisos de lectura / escritura en las tablas subyacentes. Este es un buen primer paso contra la inyección SQL.
Los procedimientos almacenados tienen inconvenientes, básicamente el mantenimiento asociado con su operación CRUD básica . Digamos que para cada tabla tiene una inserción, actualización, eliminación y al menos una selección basada en la clave primaria, eso significa que cada tabla tendrá 4 procedimientos. ¡Ahora tome una base de datos de tamaño decente de 400 tablas, y tiene 1600 procedimientos! Y eso supone que no tienes duplicados, lo que probablemente tendrás.
Aquí es donde usar un ORM u otro método para generar automáticamente sus operaciones CRUD básicas tiene mucho mérito.
Un procedimiento almacenado es un conjunto de instrucciones SQL precompiladas que se utilizan para realizar una tarea especial.
Ejemplo: si tengo una Employee
mesa
Employee ID Name Age Mobile
---------------------------------------
001 Sidheswar 25 9938885469
002 Pritish 32 9178542436
Primero estoy recuperando la Employee
tabla:
Create Procedure Employee details
As
Begin
Select * from Employee
End
Para ejecutar el procedimiento en SQL Server:
Execute Employee details
--- (Employee details is a user defined name, give a name as you want)
Luego, segundo, estoy insertando el valor en la tabla de empleados
Create Procedure employee_insert
(@EmployeeID int, @Name Varchar(30), @Age int, @Mobile int)
As
Begin
Insert Into Employee
Values (@EmployeeID, @Name, @Age, @Mobile)
End
Para ejecutar el procedimiento parametrizado en SQL Server:
Execute employee_insert 003,’xyz’,27,1234567890
--(Parameter size must be same as declared column size)
Ejemplo: @Name Varchar(30)
En la Employee
tabla, el Name
tamaño de la columna debe ser varchar(30)
.
Un procedimiento almacenado es un grupo de sentencias SQL que se han creado y almacenado en la base de datos. Un procedimiento almacenado aceptará parámetros de entrada para que varios clientes puedan utilizar un único procedimiento en la red utilizando diferentes datos de entrada. Un procedimiento almacenado reducirá el tráfico de red y aumentará el rendimiento. Si modificamos un procedimiento almacenado, todos los clientes obtendrán el procedimiento almacenado actualizado.
Muestra de crear un procedimiento almacenado
CREATE PROCEDURE test_display
AS
SELECT FirstName, LastName
FROM tb_test;
EXEC test_display;
Ventajas de usar procedimientos almacenados
Un procedimiento almacenado permite la programación modular.
Puede crear el procedimiento una vez, almacenarlo en la base de datos y llamarlo cualquier número de veces en su programa.
Un procedimiento almacenado permite una ejecución más rápida.
Si la operación requiere una gran cantidad de código SQL que se realiza de forma repetitiva, los procedimientos almacenados pueden ser más rápidos. Se analizan y optimizan cuando se ejecutan por primera vez, y una versión compilada del procedimiento almacenado permanece en una memoria caché para su uso posterior. Esto significa que el procedimiento almacenado no necesita volver a analizarse y optimizarse con cada uso, lo que resulta en tiempos de ejecución mucho más rápidos.
Un procedimiento almacenado puede reducir el tráfico de red.
Una operación que requiere cientos de líneas de código Transact-SQL se puede realizar a través de una sola instrucción que ejecuta el código en un procedimiento, en lugar de enviar cientos de líneas de código a través de la red.
Los procedimientos almacenados proporcionan una mejor seguridad a sus datos.
Los usuarios pueden obtener permiso para ejecutar un procedimiento almacenado incluso si no tienen permiso para ejecutar las declaraciones del procedimiento directamente.
En SQL Server tenemos diferentes tipos de procedimientos almacenados:
Los procedimientos almacenados en el sistema se almacenan en la base de datos maestra y comienzan con un sp_
prefijo. Estos procedimientos se pueden usar para realizar una variedad de tareas para admitir funciones de SQL Server para llamadas a aplicaciones externas en las tablas del sistema
Ejemplo: sp_helptext [StoredProcedure_Name]
Los procedimientos almacenados definidos por el usuario generalmente se almacenan en una base de datos de usuarios y generalmente están diseñados para completar las tareas en la base de datos de usuarios. Mientras codifica estos procedimientos , no use el sp_
prefijo porque si usamos el sp_
prefijo primero, verificará la base de datos maestra y luego se trata de la base de datos definida por el usuario.
Los procedimientos almacenados extendidos son los procedimientos que llaman a funciones desde archivos DLL. Hoy en día, los procedimientos almacenados extendidos están en desuso por la razón por la cual sería mejor evitar el uso de procedimientos almacenados extendidos.
En general, un procedimiento almacenado es una "Función SQL". Ellos tienen:
-- 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
Este es un ejemplo centrado en T-SQL. Los procedimientos almacenados pueden ejecutar la mayoría de las instrucciones SQL, devolver valores escalares y basados en tablas, y se consideran más seguros porque evitan los ataques de inyección SQL.
Piensa en una situación como esta,
NOTA:
Un procedimiento almacenado se utiliza principalmente para realizar ciertas tareas en una base de datos. Por ejemplo
Un procedimiento almacenado no es más que un grupo de sentencias SQL compiladas en un solo plan de ejecución.
Ejemplo: crear un procedimiento almacenado
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
Alterar o modificar un procedimiento almacenado:
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
Descartar o eliminar un procedimiento almacenado:
DROP PROCEDURE GetEmployee
Un procedimiento almacenado es un conjunto precompilado de una o más instrucciones SQL que realizan alguna tarea específica.
Un procedimiento almacenado debe ejecutarse de forma independiente utilizando EXEC
Un procedimiento almacenado puede devolver múltiples parámetros
Se puede usar un procedimiento almacenado para implementar la transacción
"Qué es un procedimiento almacenado" ya está respondido en otras publicaciones aquí. Lo que publicaré es una forma menos conocida de usar el procedimiento almacenado. Es grouping stored procedures
o numbering stored procedures
.
Referencia de sintaxis
; number
según esto
Un entero opcional que se usa para agrupar procedimientos del mismo nombre. Estos procedimientos agrupados se pueden soltar mediante el uso de una instrucción DROP PROCEDURE
Ejemplo
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
Utilizar
exec FirstTest 10
exec FirstTest;2 20,30
Resultado
Otro intento
CREATE Procedure SecondTest;2
(
@InputA INT,
@InputB INT
)
AS
BEGIN
SELECT 'A' + CONVERT(VARCHAR(10),@InputA)+ CONVERT(VARCHAR(10),@InputB)
END
GO
Resultado
Msg 2730, Nivel 11, Estado 1, Procedimiento SecondTest, Línea 1 [Batch Start Line 3] No se puede crear el procedimiento 'SecondTest' con un número de grupo de 2 porque actualmente no existe un procedimiento con el mismo nombre y un número de grupo de 1 la base de datos. Debe ejecutar CREATE PROCEDURE 'SecondTest'; 1 primero.
referencias :
PRECAUCIÓN
Un procedimiento almacenado es una colección con nombre de sentencias SQL y lógica de procedimiento, es decir, compilada, verificada y almacenada en la base de datos del servidor. Un procedimiento almacenado generalmente se trata como otros objetos de la base de datos y se controla a través del mecanismo de seguridad del servidor.
En un DBMS, un procedimiento almacenado es un conjunto de instrucciones SQL con un nombre asignado que se almacena en la base de datos en forma compilada para que varios programas puedan compartirlo.
El uso de un procedimiento almacenado puede ser útil en
Proporcionar un acceso controlado a los datos (los usuarios finales solo pueden ingresar o cambiar datos, pero no pueden escribir procedimientos)
Asegurar la integridad de los datos (los datos se ingresarían de manera consistente) y
Mejora la productividad (las declaraciones de un procedimiento almacenado deben escribirse solo una vez)
por simple,
Los procedimientos almacenados son programas almacenados , un programa / función almacenado en la base de datos.
Cada programa almacenado contiene un cuerpo que consiste en una instrucción SQL. Esta declaración puede ser una declaración compuesta compuesta por varias declaraciones separadas por punto y coma (;).
CREATE PROCEDURE dorepeat(p1 INT)
BEGIN
SET @x = 0;
REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;
END;
Los procedimientos almacenados en SQL Server pueden aceptar parámetros de entrada y devolver múltiples valores de parámetros de salida; en SQL Server, las instrucciones del programa de procedimientos almacenados para realizar operaciones en la base de datos y devolver un valor de estado a un procedimiento o lote de llamada.
Los beneficios de usar procedimientos almacenados en SQL Server
Permiten programación modular. Permiten una ejecución más rápida. Pueden reducir el tráfico de red. Se pueden utilizar como mecanismo de seguridad.
Aquí hay un ejemplo de un procedimiento almacenado que toma un parámetro, ejecuta una consulta y devuelve un resultado. Específicamente, el procedimiento almacenado acepta el BusinessEntityID como parámetro y lo utiliza para que coincida con la clave principal de la tabla HumanResources.Employee para devolver el empleado solicitado.
> 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
Aprendí esto de essential.com ... es muy útil.
En los procedimientos almacenados, las declaraciones se escriben solo una vez y reducen el tráfico de red entre clientes y servidores. También podemos evitar los ataques de inyección SQL.
ORM
gustaEntity Framework
hacerCRUD
operaciones?