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.