Procedimiento almacenado SqlServer en detalle

Vi los procedimientos almacenados del servidor SQL resumidos por otros y pensé que estaba bien escrito, así que lo tomé y esperaba que fuera útil para todos.

1. Cree una plantilla de sintaxis básica para procedimientos almacenados:

if (existe (seleccione * de sys.objects donde name = 'pro_name')) 
    suelte proc pro_name 
vaya a 
crear proc pro_name 
    @param_name param_type [= default_value] 
como 
begin     
    sql 语句
end

ps: [] indica contenido opcional. sys.objects almacena la información en esta base de datos, no solo el nombre de la tabla, sino también el nombre del procedimiento almacenado, el nombre de la vista, el desencadenador, etc.

P.ej:

1 if (existe (seleccione * de sys.objects donde name = 'USP_GetAllUser')) 
 2 elimine el proceso USP_GetAllUser 
 3 vaya 
 4 cree el proceso USP_GetAllUser 
 5 @UserId int = 1 
 6 como 
 7 configuró nocount on; 
 8 comience 
 9 seleccione * de UserInfo donde Id = @ UserId 
10 final

 

ps: la utilidad de SQL Server interpreta GO como una señal de que la instrucción por lotes de Transact-SQL actual debe enviarse a SQL Server. La sentencia de lote actual son todas las sentencias ingresadas desde el último comando GO. Si es el primer comando GO, son todas las sentencias desde el comienzo de la sesión especial o script hasta este comando GO.

2. Método de llamada:

exec dbo.USP_GetAllUser 2;

 

ps: Generalmente, al ejecutar un procedimiento almacenado, es mejor agregar un nombre de arquitectura, como dbo.USP_GetAllUser. Esto puede reducir la sobrecarga innecesaria del sistema y mejorar el rendimiento. Porque si no hay un nombre de esquema delante del nombre del procedimiento almacenado, SQL SERVER primero comenzará a buscar desde el esquema del sistema de la base de datos actual (esquema del sistema), si no se encuentra, buscará otros esquemas y, finalmente, en el esquema dbo ( esquema del administrador del sistema) Mire adentro.

 

3. Ver los procedimientos almacenados que existen en esta base de datos

Expanda la base de datos, la capacidad de programación y los procedimientos almacenados para ver los procedimientos almacenados que se han creado.

4. Modificar el procedimiento almacenado

alter proc proc_name 
como 
  declaración sql

5. El uso de parámetros de salida en el procedimiento almacenado

 

1 if (existe (seleccione * de sys.objects donde name = 'GetUser')) 
 2 suelte proc GetUser 
 3 go 
 4 create proc GetUser 
 5 @id int salida, 
 6 @name varchar (20) out 
 7 as 
 8 begin 
 9 select @ id = Id, @ name = Nombre de UserInfo donde Id = @ id 
10 end 
11 
12 go 
13 declare 
14 @name varchar (20), 
15 @id int; 
16 set @ id = 3; 
17 exec dbo.GetUser @ id, @ name out; 
18 seleccione @ id, @ nombre; 
19 print Cast (@id as varchar (10)) + '-' + @ nombre;

 

ps: la salida del parámetro es el parámetro que se puede emitir

6. Procedimiento almacenado para la paginación para obtener datos

 

1 if (existe (seleccione * de sys.objects donde name = 'GetUserByPage')) 
 2 suelte proc GetUserByPage 
 3 vaya 
 4 cree proc GetUserByPage 
 5 @pageIndex int, 
 6 @pageSize int 
 7 as 
 8 declare 
 9 @startIndex int, 
10 @endIndex En t; 
11 establecer @startIndex = (@ pageIndex-1) * @ pageSize + 1; 
12 establecer @endIndex = @startIndex + @pageSize -1; 
13 begin 
14 select Id, Name from 
15 ( 
16 select *, row_number () over (order by Id) as number from UserInfo   
17) t donde t.number> = @ startIndex y t.number <= @ endIndex 
18 end 
19 
20 go 
21 exec dbo.GetUserByPage 2,4;

 

7. La creación de transacciones en el procedimiento almacenado.

 

if (existe (seleccione * de sys.objects donde name = 'JayJayToTest')) 
    suelte proc JayJayToTest 
vaya a 
crear proc JayJayToTest 
    @GiveMoney int, 
    @UserName nvarchar (20) 
como 
beginset nocount on; 
    comenzar tran; 
    comience intente 
        actualizar BankTest set Money = Money- @ GiveMoney donde Name = @ UserName; 
        actualizar BankTest set Money = Money + @ GiveMoney donde Nombre = 'prueba'; 
        cometer; 
    final intente     
    comenzar captura         
        retroceso tran; 
        imprimir ('发生 异常 , 事务 进行 回滚'); 
    end catch     
end 
go 
ejecutivo JayJayToTest 10, 'jayjay

8. Comprender el plan de ejecución del procedimiento almacenado.

SELECT * FROM sys. [Syscacheobjects] ver el plan de ejecución en caché actual

Si la fase de análisis se supera correctamente cuando se ejecuta el procedimiento almacenado, el optimizador de consultas de Microsoft SQL Server analizará la instrucción Transact-SQL en el procedimiento almacenado y creará un plan de ejecución. El plan de ejecución describe la forma más rápida de ejecutar un procedimiento almacenado, basándose en información que incluye:

  1. La cantidad de datos en la tabla.

  2. La existencia y características del índice de la tabla y la distribución de los datos en la columna del índice.

  3. El operador de comparación y el valor de comparación utilizado en la condición de la cláusula WHERE.

  4. Si hay una conexión y las palabras clave UNION, GROUP BY y ORDER BY.

Después de analizar estos factores en el procedimiento almacenado, el optimizador de consultas coloca el plan de ejecución en la memoria. El proceso de analizar procedimientos almacenados y crear planes de ejecución se denomina compilación. El plan de ejecución optimizado en memoria se utilizará para ejecutar la consulta. El plan de ejecución permanecerá en la memoria hasta que el reinicio de SQL Server u otros objetos requieran espacio de almacenamiento. Si el procedimiento almacenado se ejecuta posteriormente y el plan de ejecución existente permanece en la memoria, SQL Server reutilizará el plan de ejecución existente. Si el plan de ejecución ya no está en la memoria, se crea un nuevo plan de ejecución.

Vuelva a compilar el plan de ejecución (cree proc JayJayToTest con recompilar)

Especificar la opción WITH RECOMPILE en su definición al crear un procedimiento almacenado indica que SQL Server no almacenará en caché el plan del procedimiento almacenado; el procedimiento almacenado se recompilará cada vez que se ejecute. Cuando los valores de los parámetros del procedimiento almacenado varían mucho entre ejecuciones y es necesario crear un plan de ejecución diferente cada vez, puede usar la opción WITH RECOMPILE. Esta opción no se usa comúnmente porque debe recompilarse cada vez que se ejecuta el procedimiento almacenado, lo que ralentizará la ejecución del procedimiento almacenado.

Debido al nuevo estado de la base de datos, ciertos cambios dentro de la base de datos pueden hacer que el plan de ejecución sea ineficiente o ya no sea válido. SQL Server detecta estos cambios que invalidan el plan de ejecución y marca el plan como no válido. Después de eso, el nuevo plan debe recompilarse para que la próxima conexión ejecute la consulta. Las circunstancias que invalidaron el plan incluyen:

  1. Realice cualquier cambio estructural en la tabla o vista a la que hace referencia la consulta (ALTER TABLE y ALTER VIEW).
  2. Genere explícitamente o genere automáticamente nuevas estadísticas de contenido de distribución a través de declaraciones (como ACTUALIZAR ESTADÍSTICAS).
  3. Elimine el índice utilizado por el plan de ejecución.
  4. Llame explícitamente a sp_recompile.
  5. Una gran cantidad de cambios en las claves (modificaciones producidas por otros usuarios usando instrucciones INSERT o DELETE en las tablas referenciadas por la consulta).
  6. Para las tablas con activadores, el número de filas en la tabla insertada o eliminada ha aumentado significativamente.

Supongo que te gusta

Origin blog.csdn.net/h610443955/article/details/83185528
Recomendado
Clasificación