Creación y uso del procedimiento almacenado de SqlServer

¿Qué es un procedimiento almacenado?

El procedimiento almacenado en T-SQL es muy similar al método en el lenguaje de red y se puede llamar repetidamente. Después de que el procedimiento almacenado se ejecuta una vez, la declaración se puede almacenar en caché para que la declaración en la caché se use directamente cuando se ejecute la próxima vez.

Esto puede mejorar el rendimiento del procedimiento almacenado.

  1. Un procedimiento almacenado Procedimiento es un conjunto de sentencias SQL para completar una función específica, se compila y almacena en la base de datos, el usuario lo ejecuta especificando el nombre del procedimiento almacenado y dando parámetros.
  2. El procedimiento almacenado puede contener declaraciones de control lógico y declaraciones de manipulación de datos. Puede aceptar parámetros, parámetros de salida, devolver conjuntos de resultados únicos o múltiples y valores de retorno.
  3. Debido a que el procedimiento almacenado se compila en el servidor de la base de datos y se almacena en la base de datos cuando se crea, el procedimiento almacenado se ejecuta más rápido que un solo bloque de instrucciones SQL.
  4. Al mismo tiempo, dado que solo se proporcionan el nombre del procedimiento almacenado y la información de parámetros necesaria al llamar, también se puede reducir el tráfico de la red y la carga simple de la red hasta cierto punto.
    Inserte la descripción de la imagen aquí
    Inserte la descripción de la imagen aquí

Ventajas de los procedimientos almacenados

1. Los procedimientos almacenados permiten la programación de componentes estándar

Una vez creado el procedimiento almacenado, se puede llamar y ejecutar varias veces en el programa sin tener que volver a escribir la instrucción SQL del procedimiento almacenado.
Y los profesionales de bases de datos pueden modificar el procedimiento almacenado en cualquier momento, pero no tiene ningún efecto sobre el código fuente de la aplicación, lo que mejora enormemente la portabilidad del programa.

2. El procedimiento almacenado puede lograr una velocidad de ejecución más rápida.

Si una operación contiene una gran cantidad de código de instrucción T-SQL y se ejecuta varias veces, el procedimiento almacenado es mucho más rápido que la ejecución por lotes.
Debido a que el procedimiento almacenado está precompilado, cuando se ejecuta un procedimiento almacenado por primera vez, el optimizador de consultas lo analiza y optimiza, y proporciona el plan de almacenamiento que finalmente se almacena en la tabla del sistema.
La instrucción de T-SQL por lotes debe compilarse previamente y optimizarse cada vez que se ejecuta, por lo que la velocidad es más lenta.

3. El procedimiento almacenado reduce el tráfico de la red.

Para la misma operación en un objeto de base de datos, si la declaración T-SQL involucrada en esta operación está organizada en un procedimiento almacenado,
entonces cuando se llama al procedimiento almacenado en el cliente, solo se pasa la declaración de llamada en la red; de lo contrario, Es una serie de declaraciones SQL.
De este modo, se reduce el tráfico de la red y se reduce la carga de la red.

4. Los procedimientos almacenados se pueden utilizar plenamente como mecanismo de seguridad.

El administrador del sistema puede restringir la autoridad de un determinado procedimiento almacenado para que se ejecute, a fin de restringir el acceso a ciertos datos, evitar que usuarios no autorizados accedan a los datos y garantizar la seguridad de los datos.

Inserte la descripción de la imagen aquí

Desventajas de los procedimientos almacenados

1. Velocidad de carrera

Para SQL muy simple, no hay ninguna ventaja en la velocidad de ejecución del procedimiento almacenado.

2. El código no es fácil de leer y no es fácil de mantener.

El desarrollo y la depuración de procedimientos almacenados es más difícil que los programas ordinarios (las versiones anteriores de DB2 solo pueden escribir procedimientos almacenados en C, lo que es aún más un desastre).
El código es poco legible y no es fácil de mantener.

3, diferencia de trasplantabilidad

Debido a que los procedimientos almacenados unen aplicaciones a SQL Server, el uso de procedimientos almacenados para encapsular la lógica empresarial limitará la portabilidad de las aplicaciones.
Si la portabilidad de la aplicación es muy importante en su entorno, encapsular la lógica empresarial en un nivel intermedio que no sea específico de RDBMS puede ser una mejor opción.

La sintaxis básica de los procedimientos almacenados

Declaración de variable:
al declarar una variable, debe agregar el símbolo @
declare @num int antes de la variable

Asignación de variable:
set
set @ num = 30 debe agregarse antes de la variable al asignar una variable

Declare múltiples variables:
declare @name varchar (10), @ num int

El uso de la declaración if:

declare @d int
set @d = 1
IF @d = 1
BEGIN
    PRINT '正确' 
END 
ELSE BEGIN 
    PRINT '错误' 
END

Declaración de selección multicondicional:

declare @today int
declare @week nvarchar(3)
set @today=3
set @week= case
     when @today=1 then '星期一'
     when @today=2 then '星期二'
     when @today=3 then '星期三'
     when @today=4 then '星期四'
     when @today=5 then '星期五'
     when @today=6 then '星期六'
     when @today=7 then '星期日'
     else '值错误'
end
print @week

declaración de bucle:

DECLARE @i INT
SET @i = 1
WHILE @i<1000000 BEGIN
set @i=@i+1
END

Defina el cursor:

DECLARE @cur1 CURSOR FOR SELECT .........

OPEN @cur1
FETCH NEXT FROM @cur1 INTO 变量
WHILE(@@FETCH_STATUS=0)
BEGIN
处理.....
FETCH NEXT FROM @cur1 INTO 变量
END
CLOSE @cur1
DEALLOCATE @cur1

Clasificación de procedimientos almacenados

1. Procedimientos almacenados del sistema

Los procedimientos almacenados del sistema son procedimientos almacenados creados por el sistema, cuyo propósito es consultar información convenientemente de las tablas del sistema o completar las tareas de administración relacionadas con la actualización de las tablas de la base de datos u otras tareas de administración del sistema.
Los procedimientos almacenados del sistema se almacenan principalmente en la base de datos maestra. Los procedimientos almacenados comienzan con el guión bajo "sp".
Aunque estos procedimientos almacenados del sistema están en la base de datos maestra, aún podemos llamar a los procedimientos almacenados del sistema en otras bases de datos.
Algunos procedimientos almacenados del sistema se crearán automáticamente en la base de datos actual cuando se cree una nueva base de datos.

1.1, ejemplo de sql de procedimiento almacenado del sistema

--表重命名
exec sp_rename 'stu', 'stud';--列重命名
exec sp_rename 'stud.name', 'sName', 'column';
exec sp_help 'stud';
--重命名索引
exec sp_rename N'student.idx_cid', N'idx_cidd', N'index';
exec sp_help 'student';

--查询所有存储过程
select * from sys.objects where type = 'P';
select * from sys.objects where type_desc like '%pro%' and name like 'sp%';

2. Procedimientos almacenados personalizados

El llamado procedimiento almacenado personalizado se refiere a un conjunto de declaraciones editadas por t-sql en la base de datos del usuario para completar un requisito funcional específico. En el proceso definido por el usuario, puede haber parámetros de entrada, parámetros de salida devueltos y volver a Información y resultados del cliente.
Si se agrega el símbolo "##" delante del nombre del procedimiento almacenado, significa que el procedimiento almacenado creado es temporal y global;
si lo anterior es el símbolo "#", significa que el procedimiento almacenado creado es temporal y local y el procedimiento almacenado solo se puede utilizar en la sesión en la que se creó.
Una vez creados los dos procedimientos almacenados anteriores, se almacenan en la base de datos tempdb.
Los procedimientos almacenados definidos por el usuario también se pueden subdividir en procedimientos almacenados en lenguaje t-sql y procedimientos almacenados CLR. El procedimiento almacenado CLR se refiere a un procedimiento almacenado editado usando el lenguaje común de .NET framework. Puede aceptar parámetros proporcionados por el usuario y devolver el resultado de ejecución del procedimiento almacenado. Generalmente se usa como un método estático público de una determinada clase. .

2.1, crea un procedimiento almacenado sin parámetros

--创建一个返回结果集的存储过程(proc或者procedure均可)
if (object_id('proc_get_student', 'P') is not null)--判断存储过程是否存在 另外一种 if (exists (select * from sys.objects where name = 'proc_get_student'))//
drop proc proc_get_student --删除存储过程
go
create proc proc_get_student --创建存储过程
as
select * from student; --结果集

--调用执行存储过程,得到返回集(exec或者execute均可)
exec proc_get_student;

2.2, modificar el procedimiento almacenado

--修改存储过程
alter proc proc_get_student
as
select * from student;  --修改后的SQL语句

--调用执行存储过程,得到返回集(exec或者execute均可)
exec proc_get_student;

2.3. Procedimiento almacenado con parámetros

--创建一个返回结果集的存储过程(proc或者procedure均可)
if (object_id('proc_find_stu', 'P') is not null)--判断存储过程是否存在
drop proc proc_find_stu
go
create proc proc_find_stu(@startId int, @endId int)--两个参数
as
select * from student where id between @startId and @endId   --查询语句
go

--调用执行存储过程,2,4为参数
exec proc_find_stu 2, 4;

2.4. Procedimiento almacenado con parámetro comodín

--创建一个返回结果集的存储过程(proc或者procedure均可)
if (object_id('proc_findStudentByName', 'P') is not null)
drop proc proc_findStudentByName
go
create proc proc_findStudentByName(@name varchar(20) = '%j%', @nextName varchar(20) = '%')
as
select * from student where name like @name and name like @nextName;
go

--调用执行存储过程
exec proc_findStudentByName;
exec proc_findStudentByName '%o%', 't%';

2.5. Procedimiento almacenado con parámetros de salida

--创建一个返回结果集的存储过程(proc或者procedure均可)
if (object_id('proc_getStudentRecord', 'P') is not null)
drop proc proc_getStudentRecord
go
create proc proc_getStudentRecord(
@id int, --默认输入参数
@name varchar(20) out, --输出参数
@age varchar(20) output--输入输出参数
)
as
select @name = name, @age = age from student where id = @id and sex = @age;
go

--调用执行存储过程
declare @id int,
@name varchar(20),
@temp varchar(20);
set @id = 7;
set @temp = 1;
exec proc_getStudentRecord @id, @name out, @temp output;
select @name, @temp;
print @name '#' @temp;

3. Procedimientos almacenados extendidos

Por lo general, se identifica con "xp_" como prefijo, la función se realiza mediante la ejecución de una biblioteca de vínculos dinámicos, es decir, un archivo DLL, fuera del sistema del servidor SQL. El procedimiento almacenado a menudo se edita utilizando la interfaz API y se puede cargar en el espacio de direcciones. de la instancia del servidor SQL. Ejecución de prueba.

Los procedimientos almacenados extendidos comunes en el servidor SQL son:

  • xp_enumgroups Especifica la lista de grupos locales de WINDOWS. La tabla de grupos globales definida en el dominio de WINDOWS xp_findnextmsg
  • Acepte el número de ID de correo de entrada y devuelva el número de ID de correo de salida xp_grantlogin para asignar el permiso de usuario al sistema sql server2012
  • xp_logevent Ingrese mensajes definidos por el usuario en el archivo de registro del servidor SQL o en el visor de eventos del sistema de Windows
  • xp_loginconfig muestra la configuración de seguridad del inicio de sesión cuando se ejecuta la instancia de SQL Server 2012

De acuerdo, detengámonos aquí

Adiós, nos vemos la próxima.


Bienvenido a seguir y suscribirse a mi plataforma pública de WeChat [Xiong Ze tiene algo que decir], más conocimientos divertidos y fáciles de aprender esperando por ti

Autor: Xiong Ze - amargo aprender música con
el número público: Bear Ze algo que decir
Fuente 1: https://www.cnblogs.com/xiongze520/p/14595601.html
Fuente 2: https://blog.csdn.net / qq_35267585 / article / details / 115324181 No
es fácil de crear. Cualquier persona, grupo u organización reimpresiones o reimpresiones parciales o extractos, por favor indique el autor y el enlace original en un lugar obvio en el artículo.
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_35267585/article/details/115324181
Recomendado
Clasificación